我有這5列的數據幀有條件置字符串
val1 val2 val3 val4 val5
1 0 3 0 5
0 0 0 0 5
1 2 0 0 0
等
我試圖創建一個新的列有一個條件:連接(計算結果不能串連零)
val6
1,3,5
5
1,2
等
有什麼想法嗎?
我有這5列的數據幀有條件置字符串
val1 val2 val3 val4 val5
1 0 3 0 5
0 0 0 0 5
1 2 0 0 0
等
我試圖創建一個新的列有一個條件:連接(計算結果不能串連零)
val6
1,3,5
5
1,2
等
有什麼想法嗎?
我認爲這是重複的。但是,找不到一個如此回答。
我們可以使用apply
逐行,並刪除值爲0的元素,並粘貼剩餘值,用逗號分隔。
df$val6 <- apply(df, 1, function(x) paste0(x[x!=0], collapse = ","))
df
# val1 val2 val3 val4 val5 val6
#1 1 0 3 0 5 1,3,5
#2 0 0 0 0 5 5
#3 1 2 0 0 0 1,2
另一種選擇,可以使用by
df$val6 <- by(df, 1:nrow(df), function(x) paste0(x[x!=0], collapse = ","))
'apply' o不幸的是,數據幀非常低效,因爲數據被轉換爲矩陣,需要複製整個數據(不同的存儲器佈局意味着它不能共享表示)。 –
我們可以replace
嘗試gsub
gsub("NA\\s*|\\s*NA|NA+", "", do.call(paste,replace(df1, df1==0, NA)))
#[1] "1 3 5" "5" "1 2"
也可能像'GSUB( 「NA | NA」 ,「」,do.call(paste,c(sep =「,」,replace(df,df == 0,NA))))' –