2017-06-19 19 views
0
G1G2Effect WEIGHT2 Sim1 Sim2 Sim3 Sim4 Sim5 Sim6 Sim7 Sim8 Sim9 Sim10 Sim11 Sim12 
1 -0.0312 2.833103 -0.0312 -0.0312 0.0000 -0.0312 0.0312 0.0000 -0.0312 -0.0312 -0.0312 -0.0312 0.0000 -0.0312 
2 -0.0640 2.536790 0.0000 -0.0640 -0.0640 -0.0640 -0.0640 -0.0640 -0.0640 -0.0640 -0.0640 -0.0640 -0.0640 -0.0640 
3  0.0420 3.309074 0.0420 0.0000 0.0000 0.0420 0.0420 0.0420 0.0420 0.0420 0.0420 0.0420 0.0420 0.0000 
4  0.0332 2.476224 0.0332 0.0332 0.0332 0.0332 0.0332 0.0000 0.0332 0.0332 0.0332 0.0332 -0.0332 0.0332 
5  0.0000 2.265289 0.0302 0.0302 0.0302 0.0000 0.0302 0.0000 0.0302 -0.0302 0.0302 0.0000 0.0302 0.0000 
6  0.0000 1.272609 0.0116 0.0000 0.0000 0.0116 0.0000 -0.0116 0.0032 -0.0102 0.0101 

我有上面的data.frame ^。我正在嘗試創建一個新的data.frame,它只是每列的總和。如何使用ColSums

df2 <- colSums(as.numeric(as.character(df1))) 

但我收到錯誤消息

錯誤colSums(as.numeric(as.character(考試))): 'x' 的必須是至少兩個維度的陣列 另外:警告消息: 在is.data.frame(X):來港受到脅迫

這是怎麼回事出臺?

+0

如果列'factor',使用'lapply'做到這一點'lapply(DF1,功能(x)as.numeric(as.character(x)))' – akrun

+0

那些因素是? - 奇怪 – Sotos

+0

你試過colSums(x,na.rm = FALSE)嗎? – sairaamv

回答

1

as.numeric/as.character適用於vector/matrix而不適用於data.frame。我們通過數據集需要循環,並將其轉換爲numeric,然後應用sum

sapply(df1, function(x) sum(as.numeric(as.character(x)), na.rm = TRUE)) 

我們也可以tidyverse

library(tidyverse) 
df1 %>% 
    mutate_all(funs(sum(as.numeric(as.character(.)), na.rm = TRUE))) 

做到這一點。如果我們真的需要colSums,一種選擇是將data.frame轉換爲matrix,因此factor類獲得轉換教育署character,然後將其更改爲numeric,分配給dim原始數據集的尺寸,並獲得colSums

colSums(`dim<-`(as.numeric(as.matrix(df1)), dim(df1)), na.rm = TRUE) 
+0

@Sotos是的,你是對的。我一定把它誤認爲是卑鄙的。 – akrun

+0

奇怪的是,只有數字的數據幀被轉換爲因子。從未在 – Sotos

+2

@Sotos之前看過最後一行,在某些情況下,它是空白的。可能這就是原因。也許OP可能提到'read.csv(「file.csv」,na.strings =「」)' – akrun