簡體   English   中英

合並R中的兩個因子列

[英]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在一起。 toStringpaste(., 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.

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