簡體   English   中英

如何有條件地將多列中的值提取到新列中?

[英]How do I pull the values from multiple columns, conditionally, into a new column?

我是一個相對新手的 R 用戶,雖然熟悉 dplyr 和 tidy verse。 如果滿足特定條件,我似乎仍然無法弄清楚如何將實際數據從一列中提取到新列中。

這就是我想要做的。 參與者對特定實踐(n=5)進行了排名,並回答了代表他們對這些實踐的信念的問題。 我想有五個新專欄,將他們對實踐的信念分配給他們的等級,而不是實踐。

例如,他們有一個名為 ni.beliefs 的“關於 NI 的信念”的分數,如果參與者將 NI 列為他們的第一選擇,我希望將 ni.beliefs 的值拉到 first.beliefs 的新列中。 同樣,如果參與者將 pmii 作為他們的首選實踐,他們的 pmii.beliefs 值應該被拉入 first.beliefs 列。

所以,我需要五個新的列,稱為:first.beliefs、second.beliefs、third.beliefs、fourth.beliefs、last.beliefs,然后我需要每一個都有條件地從實踐特定信念中提取數據(ni.beliefs)。信念、dtt.beliefs、pmi.beliefs、sn.beliefs、script.beliefs)取決於實踐的特定等級(每個實踐的等級分配為 1-5,rank.ni、rank.dtt、rank.pmi、rank.sn , rank.script)。

這是我到目前為止所擁有的,但我被卡住了,並意識到這不是很接近。 任何幫助表示贊賞!

`

Diss$first.beliefs <-ifelse(rank.ni==1, ni.beliefs,
                    ifelse(rank.dtt==1, dtt.beliefs,
                           ifelse(rank.pmi==1, pmi.beliefs,
                                  ifelse(rank.sn, sn.beliefs,
                                         ifelse(rank.script==1, script.beliefs)))))

`

謝謝!!

我不確定我是否理解正確(如果您展示數據的樣子會有所幫助),但這就是我的想法:

不使用額外的包,如果排名列相當於你想要的新列的索引(即他們將每個練習從 1 到 5 排名,沒有重復,並且與新列的順序相同“第一信念,第二信念,等”),那么您可以使用該數據作為第二組列的索引:

for(j in 1:nrow(people_table)){
people_table[j,]$first.belief[[1]] <- names(beliefs)[(people_table[j,c(A:B)]) %in% 1]
people_table[j,]$second.belief[[1]] <- names(beliefs)[(people_table[j,c(A:B)]) %in% 2]
...
}

在哪里

A -> index of the first preference rank column

B -> index of the last preference rank column

(people_table[j,c(A:B)] %in% 1) -> this returns something like (FALSE FALSE TRUE FALSE FALSE)

beliefs -> vector with the names of each belief

那應該工作。 它很簡單,不需要包,而且速度也很快。 只需確保您已先初始化/創建新列,否則會出現一些錯誤。 如果

這可以通過 case_when() 函數輕松完成。 您可以改進下面的代碼。

library(dplyr)

Diss$first.beliefs <- case_when(
  rank.ni == 1 ~ ni.beliefs,
  rank.dtt == 1 ~ dtt.beliefs,
  rank.pmi == 1 ~ pmi.beliefs,
  rank.sn ~ sn.beliefs,
  rank.script == 1 ~ script.beliefs
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM