合并R中的两个因子列

合并R中的两个因子列,r,merge,R,Merge,您好,我在R中遇到了一些问题。我正在尝试在一个数据帧中合并(合并?)两个(因子)列。对于每一行,只有一列中有一个值,我希望将它们合并,以便所有行都有一个值。作为一个简化的示例,假设我运行了以下代码:df出现这些数字的原因是因为data.frame包含因子: 检查?data.frame,尤其是参数stringsAsFactors df <- data.frame(x=c("a", "b", " ", " "), y=c(" ", " ", "q", " "

您好,我在R中遇到了一些问题。我正在尝试在一个数据帧中合并(合并?)两个(因子)列。对于每一行,只有一列中有一个值,我希望将它们合并,以便所有行都有一个值。作为一个简化的示例,假设我运行了以下代码:
df出现这些数字的原因是因为data.frame包含
因子:
检查
?data.frame
,尤其是参数
stringsAsFactors

df <- data.frame(x=c("a", "b", " ", " "), 
                 y=c(" ", " ", "q", " "), 
                 z=c(" ", " ", " ", "p"), 
                 stringsAsFactors = FALSE)

df$merged = ifelse(df$x == " ", df$y, df$x)

df在示例数据集中,有三列。当存在多个列时,可以使用以下方法。(这里,我假设每行中只有一个“值”)

如果每行有多个“值”,则可以
将这些值粘贴在一起
toString
粘贴(,,collapse=“,”)的包装器

或者您可以
melt
数据集,然后使用
aggregate
粘贴

library(reshape2)
aggregate(value~Var1, subset(melt(as.matrix(df)), value!= ' '), 
                      toString)$value
数据
df请确保您的输入df(四行,三列)与输出(三行,两列)匹配。我喜欢您的答案。但我相信你的答案假设它是一个只有X列的数据帧,它们都应该合并。你能展示你的第一个例子的一个修改版本来展示我如何使用索引从X列合并到Z列吗?@JimBeam在这种情况下,只为那些列设置子集,即
df[c(“X”,“Z”)][cbind(1:nrow(df),max.col(df[c(“X”,“Z”)!=”,“first”)]
或为列设置子集的数字索引。
  x y merged
1 a        2
2 b        3
3   q      2
df <- data.frame(x=c("a", "b", " ", " "), 
                 y=c(" ", " ", "q", " "), 
                 z=c(" ", " ", " ", "p"), 
                 stringsAsFactors = FALSE)

df$merged = ifelse(df$x == " ", df$y, df$x)
df$merged <- df[cbind(1:nrow(df),max.col(df!=' ', 'first'))]
df
#  x y z merged
#1 a          a
#2 b          b
#3   q        q
#4     p      p
apply(df, 1, function(x) x[x!=' '])
#[1] "a" "b" "q" "p"
apply(df,1, function(x) toString(x[x!=' ']))
library(reshape2)
aggregate(value~Var1, subset(melt(as.matrix(df)), value!= ' '), 
                      toString)$value
df <- data.frame(x=c("a", "b", " ", " "), y=c(" ", " ", "q", " "), 
                z=c(" ", " ", " ", "p"))