在R中组织复杂数据

在R中组织复杂数据,r,sum,R,Sum,我有一个非常大的数据集。大约300列,500000行。数据是整齐的,没有重复或不必要的东西。这些列可以以许多不同的方式进行有意义的排列,这意味着我想在一种情况下创建,例如,第5列、第8列、第10列和第15列的总和。但在另一个例子中,我想对第5、8、10和274列求和。为每个这样的实例创建一组数据帧显然是多余的。我目前处理这个问题的方法是使用任意索引。例如,通过以下方式计算总和: index <- c(5,8,10,274) sum(df[index]) indexset.seed(123

我有一个非常大的数据集。大约300列,500000行。数据是整齐的,没有重复或不必要的东西。这些列可以以许多不同的方式进行有意义的排列,这意味着我想在一种情况下创建,例如,第5列、第8列、第10列和第15列的总和。但在另一个例子中,我想对第5、8、10和274列求和。为每个这样的实例创建一组数据帧显然是多余的。我目前处理这个问题的方法是使用任意索引。例如,通过以下方式计算总和:

index <- c(5,8,10,274)
sum(df[index])
index
set.seed(123)
df
set.seed(123)

谢谢!但我现在明白了,我应该详细阐述一下。问题是,我有时想要指定许多变量,这使得枚举非常困难。这就是我使用任意索引的原因。使用带有任意索引的colSums会给出:“错误:不能使用类列表的对象使用
[
进行子集。”将更新线程。@gordonpennycook,我看到了上面的编辑,但我仍然感到困惑。如果你想使用列名而不是数字,你可以,就像我使用“按名称”一样例如,如果您的列具有有意义的名称,在您可以使用tidyverse的select helper函数选择列组后,这些名称可能会通知您所属的分组:选择列组。您希望选择的变量名称集中是否有公共子字符串?在这种情况下,您可以使用colSums(df[,grep(“yoursubstring”,names(df)])@Greg,只有当A和B是列的名称时,这才有效。我需要做的是使用数字向量查找A和B。我会看看是否可以用MWE展开。谢谢!但我现在明白了,我应该更详细地阐述。问题是,我有时想要指定许多变量,这使得枚举非常困难。这就是我使用任意索引的原因。使用带有任意索引的colSums会给出:“错误:无法使用类列表的对象使用
[
进行子集。”将更新线程。@gordonpennycook,我看到了上面的编辑,但我仍然感到困惑。如果你想使用列名而不是数字,你可以,就像我在“按名称”中所做的那样例如,如果您的列具有有意义的名称,在您可以使用tidyverse的select helper函数选择列组后,这些名称可能会通知您所属的分组:选择列组。您希望选择的变量名称集中是否有公共子字符串?在这种情况下,您可以使用colSums(df[,grep(“yoursubstring”,names(df)])@Greg,只有当A和B是列的名称时,这才有效。我需要做的是使用数字向量找到A和B。我会看看我是否可以用MWE展开。只需更改
lst你非常有帮助,我意识到我问的问题不够清楚。真的很抱歉。现在唯一的区别是我的意思是独立(这就是我添加Lappy的原因).因此,计算有意义的名称1的和,然后计算2的和。不在一起。好吧,我想我们已经到了。下面是一个for循环,希望它能满足您的需要。太棒了,非常感谢!现在我只需要找出如何适当地批准响应。只需更改
lst您非常有帮助,我意识到我不是在问问题很清楚。真的很抱歉。现在唯一的区别是我的意思是独立(这就是我添加Lappy的原因).因此,计算meaningfulname1的和,然后计算2的和。不在一起。好吧,我想我们到了。下面是一个for循环,希望它能满足您的需要。太棒了,非常感谢!现在我只需要找出如何适当地批准响应。
    set.seed(123)
    df <- data.frame("A" = runif(1000, min = 1, max = 10),
                     "B" = runif(1000, min = 1, max = 10),
                     "C" = runif(1000, min = 1, max = 10),
                     "D" = runif(1000, min = 1, max = 10),
                     "E" = runif(1000, min = 1, max = 10),
                     "F" = runif(1000, min = 1, max = 10),
                     "G" = runif(1000, min = 1, max = 10),
                     "H" = runif(1000, min = 1, max = 10),
                     "I" = runif(1000, min = 1, max = 10),
                     "J" = runif(1000, min = 1, max = 10))

# Suppose I want to sum over A, D, F, and J.
    meaningfulname1 <- c(1,4,6,10) #works fine
sum(df[meaningfulname1])
# Then a few more/other columns
    meaningfulname2 <- c(1,2,5,9,10) #works fine
    sum(df[meaningfulname2]) #both of these work fine, but how do I sum over both at the same time? E.g. below:

    lst <- list(meaningfulname1,meaningfulname2)    
    lapply(df[lst], sum) # doesn't work
set.seed(123)
df <- data.frame("A" = runif(1000, min = 1, max = 10),
                 "B" = runif(1000, min = 1, max = 10),
                 "C" = runif(1000, min = 1, max = 10),
                 "D" = runif(1000, min = 1, max = 10),
                 "E" = runif(1000, min = 1, max = 10),
                 "F" = runif(1000, min = 1, max = 10),
                 "G" = runif(1000, min = 1, max = 10),
                 "H" = runif(1000, min = 1, max = 10),
                 "I" = runif(1000, min = 1, max = 10),
                 "J" = runif(1000, min = 1, max = 10))

meaningfulname1 <- c(1,4,6,10) #works fine
meaningfulname2 <- c(1,2,5,9,10) #works fine
lst <- list(meaningfulname1, meaningfulname2)    
sums_list <- list()
for (i in 1:length(lst)){
sums_list <- c(sums_list, sum(df[lst[[i]]], na.rm = TRUE))     
}

names(sums_list) <- c("meaningfulname1", "meaningfulname2")

sums_list
$meaningfulname1
[1] 22054.61

$meaningfulname2
[1] 27259.2