r - 如何在 R 中有条件地粘贴因子标签

标签 r conditional-statements concatenation paste

希望有人能帮助我解决这个问题,我刚刚自己找到了一个糟糕的解决方案:我想聚合(或粘贴)四列的标签(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

我确信有一种简单的方法可以做到这一点,此外我的代码似乎无法以这种方式工作..有人可以帮助我吗?谢谢

最佳答案

此解决方案可行,但您必须声明要从因子粘贴的值向量。

# 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=" ")  
}

关于r - 如何在 R 中有条件地粘贴因子标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43717321/

相关文章:

c - 具有相同条件的 while 循环内的 if 语句

java - 根据多个参数处理许多条件的模式是什么?

testing - 检查模式模式匹配是否成功或失败

join - 串联 - 名字和姓氏相同的列 (Oracle SQL)

sql - Postgres 将超过 100 个参数传递给 CONCAT 函数

r - 哪个 R 函数用于文本自动更正?

r - 不要转义 Rmarkdown 文件中的特殊字符

r - 使用浏览按钮从 Shiny UI(不仅仅是目录)获取文件路径而不上传文件

r - 如何在 R 中从两个 data.frames 创建一个(不平衡)面板?

sql-server - SQL 服务器 : Group by string concatenation