2016-11-22 88 views
0

我有R中混合字符和整數數據幀:薩姆混合列在R:總和整數細胞,串連字符細胞

 NAME  ID  X  Y  Z 
1 apple a123p 1.0  2.0 3.0 
2 orange o483e 4.0  5.0 6.0 
3 grape g302e 1.0  1.5 2.0 

其中只列Name包含的字符,並且列的其餘部分( ID, X, Y, Z)包含整數。我想添加某些列:彙總整數,並加入字符。

所需的輸出如果添加了蘋果+橘子:

 NAME   ID    X  Y  Z 
1 apple   a123p   1.0  2.0 3.0 
2 orange   o483e   4.0  5.0 6.0 
3 grape   g302e   1.0  1.5 2.0 
4 apple_orange a123p_o483  5.0  7.0 9.0 

這可能嗎?我試着查找教程dplyraggregate,但遇到錯誤和困惑。我不確定是否有特定的需求。

謝謝。

+1

什麼是添加兩件事情的邏輯 - 爲什麼蘋果和橙子?你想寫一個函數名稱可以被指定爲參數?爲什麼輸出成爲同一數據框中的新行? – vagabond

+0

(1)你確定'ID'是整數嗎? (2)與@vagabond相同的Q,他稍微打敗了我... –

+0

輸出不需要在同一個數據框中成爲新行,它可以是在一個新的DF。在真實數據中,我有相關的項目(即:版本1,版本2,版本3),並希望獲得這些項目的不同組合的總和。但我想跟蹤哪兩個版本加在一起:即:v1 + v3,v1 + v2,v2 + v3。 – moxed

回答

0

創建行的索引,其中,「NAME」或者是「蘋果」或「桔子」

i1 <- df1$NAME %in% c("apple", "orange") 

然後找到整數和字符列

i2 <- sapply(df1, is.numeric) 

,並使用索引子集行,列通過非整數列循環,類似地,循環遍歷整數列,得到sum,將list附加在c和之間以及w ith原始數據集

rbind(df1, c(lapply(df1[i1, !i2], paste, collapse="-"), lapply(df1[i1, i2], sum))) 
#   NAME   ID X Y Z 
#1  apple  a123p 1 2.0 3 
#2  orange  o483e 4 5.0 6 
#3  grape  g302e 1 1.5 2 
#4 apple-orange a123p-o483e 5 7.0 9 
+0

運行到「無效因子水平,產生NA」錯誤。我認爲我的數字列一定有問題。這確實可以連接字符列! – moxed

+0

@moxed在我的例子中,我使用'NAME'和'ID'作爲'character'類。在應用代碼'df1 [1:2] < - lapply(df1 [1:2],as.character)' – akrun

+0

這個工作完成之前,你可以做一件事。謝謝!新手問題/好奇心:如果我不關心連接字符串,只想求和值,我會只使用lapply函數嗎? – moxed