[英]Merge two factor columns in R
嗨,我在R中遇到了麻煩。我正在嘗試合並(合並?)數據幀中的兩個(因子)列。 對於每一行,只有一列中有一個值,我想將它們組合起來,以便所有行都有一個值。 作為簡化示例,假設我運行了以下代碼: df <- data.frame(x=c("a", "b", " ", " "), y=c(" ", " ", "q", " "), z=c(" ", " ", " ", "p"))
,得到以下數據幀
x y
1 a
2 b
3 q
在x和y列合並之后,結果將是
x y merged
1 a a
2 b b
3 q q
我嘗試使用df$merged = ifelse(df$x == " ", df$y, df$x)
,但是它給了我這些數字。 知道它們是什么意思嗎?
x y merged
1 a 2
2 b 3
3 q 2
我遇到的所有其他有用信息都適用於數字,但不適用於字符。 到目前為止,我在嘗試的方法是否正確?
看來這是一個簡單的問題,但我找不到解決方案。 任何幫助,將不勝感激。
謝謝大家
在示例數據集中,有三列。 當有多個列時,可以使用以下方法。 (在這里,我假設每行中只有一個“值”)
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"
如果每行有多個“值”,則可以將這些值paste
在一起。 toString
是paste(., collapse=", ")
的包裝
apply(df,1, function(x) toString(x[x!=' ']))
或者您可以melt
數據集,然后使用aggregate
paste
值
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"))
數字出現的原因是因為您的data.frame包含factors
:
檢查?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)
旁注:對於您data.frame中的孔,實際上不建議使用空格" "
。 改用NA
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.