簡體   English   中英

如何有條件地在R中粘貼因子標簽

[英]How to paste factor labels conditionally in R

希望有人可以幫我解決這個問題,為此我自己找到了一個糟糕的解決方案:我想將四列( AD )的標簽聚合(或粘貼)到第五列( dream ),但有條件的是,僅當其數值為2時。

這是我的數據庫df

id= c(1:12)
A = c(2,NA,NA,2,NA,1,1,1,1,1,NA,2)
B = c(2,1,1,1,2,NA,1,1,1,1,2,1)
C = c(2,1,1,1,2,NA,1,1,1,1,NA,1)
D = c(2,1,1,1,1,1,2,1,1,NA,2,1)
df = data.frame(id,A,B,C,D) ; df
df$A=factor(df$A, labels=c("no", "i saw"))
df$B=factor(df$B, labels=c("no", "someone"))
df$C=factor(df$C, labels=c("no", "sitting"))
df$D=factor(df$D, labels=c("no", "on a cloud")) ; df

這是我找到的解決方案的下方,但並不令人滿意...

df$dream = ifelse(as.numeric(df$A)!=2, NA, as.character(df$A)) ; df
df$dream = ifelse(as.numeric(df$B)!=2, df$dream, paste(df$dream, as.character(df$B))) ; df
df$dream = ifelse(as.numeric(df$C)!=2, df$dream, paste(df$dream, as.character(df$C))) ; df
df$dream = ifelse(as.numeric(df$D)!=2, df$dream, paste(df$dream, as.character(df$D))) ; df

我敢肯定有一種直接的方法可以做到這一點,此外,我的代碼似乎甚至無法以這種方式工作。有人可以幫助我嗎? 謝謝

我認為,如果你改變你會更容易data.framedata.table

對於column B您可以使用

dt <- as.data.table(df)
dt[,dream:=ifelse(B==2,"someone",ifelse(B==1,"no",NA))]

然后為其余3 columns復制相同的內容。 我希望這有幫助

UPDATE

也許您可以嘗試一下

dt$dream.A <- mapvalues(dt$A,c(1,2),c("no", "i saw"))

此解決方案將起作用,但您必須聲明要從因子粘貼的值的向量。

# init empty result vector
dream <- character(nrow(df))
# values from each column (A-D) you want to paste
values <- c("i saw","someone","sitting", "on a cloud")
# iterate over each row
for(i in seq_len(nrow(df))){
  #paste values from each row
  dream[i] <- paste(values[which(as.numeric(df[i,-1]) == 2)], collapse=" ")  
}

暫無
暫無

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

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