2017-10-05 51 views
0

有3個數據幀。 ID變量位於每個數據幀的第12列。我創建了一個向量list_cc_q1,其中包含所有數據幀中的所有唯一ID(因此該向量中的每個條目都出現在至少一個數據幀的第12列中)。通過ID變量在數據幀之間求和變量

我希望創建,增加了,對於每個ID的向量v1,在從含有該ID的每個數據幀中的第七列中的值(因此v1將是相同長度的作爲list_cc_q1)。下面是我使用的代碼:我想我已經過於複雜的代碼,一個簡單的方法將是極大的幫助

Error in get(y)[x, 12] : incorrect number of dimensions 
Called from: which(get(y)[x, 12]) 

f1 <- function(x,y){ 
     ifelse(length(get(y)[which(get(y)[x,12]),7])>0, get(y)[which(get(y)[x,12]),7], 0)} 

g1 <- function(x){sum(sapply(ls()[1:3], function(y){ f1(x,y)}))} 

v1 <- sapply(list_cc_q1, function(z){ g1(z) }) 

這將返回以下錯誤。

但爲什麼不工作?

回答

1

不知道我理解正確的,但如何:

library(data.table) 
dt <- data.table(value = c(df1[[7]],df2[[7]],df3[[7]]), id = c(df1[[12]],df2[[12]],df3[[12]])) 
dt[, .(sum = sum(value)), by = id] 

這樣可以將每三個data.frames(DF1,DF2,DF3)的第7列的值列和第12列每個data.frames(df1,df2,df3)添加到一個id列以形成一個data.table,其中包含兩列(值和id)。然後它通過id列對值列進行求和。

編輯:您的代碼可能不是因爲()命令的功能環境不包含你的三個data.frames如果我看到這個正確執行

ls()[1:3] 

的LS的工作。你可以通過比較以下幾點看到:

ls()[1:3] 
# [1] "df1" "df2" "df3" 
function_ls <- function(){cat(ls()[1:3])} 
function_ls() 
# NA NA NA 
+0

完美!你理解正確。通過使用ls(envir = .GlobalEnv)修正我的代碼'[和另一個修正關於哪個']。但是你的代碼片斷要快2500倍。謝謝! –