Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试生成一个循环,用于对R中的连续列值求和_R_Loops_For Loop_Sum_Nested Loops - Fatal编程技术网

尝试生成一个循环,用于对R中的连续列值求和

尝试生成一个循环,用于对R中的连续列值求和,r,loops,for-loop,sum,nested-loops,R,Loops,For Loop,Sum,Nested Loops,我试图生成一个循环函数,将一个表的连续列值相加,并将它们输出到另一个表中 例如,在我的原始表中,我们有a、b、c等列,它们包含相同数量的数值。 结果表应该是a、a+b、a+b+c等,直到原始表的最后一列 我有一种感觉,for循环对于这个操作应该足够了,但是我无法理解格式和语法 任何帮助都将不胜感激 因为您是新来的,这里有一个非常小的可重复性示例 library(data.table) x = data.table(a=1:3,b=4:6,c=7:9) for(... now what? 下面是

我试图生成一个循环函数,将一个表的连续列值相加,并将它们输出到另一个表中

例如,在我的原始表中,我们有a、b、c等列,它们包含相同数量的数值。 结果表应该是a、a+b、a+b+c等,直到原始表的最后一列

我有一种感觉,for循环对于这个操作应该足够了,但是我无法理解格式和语法


任何帮助都将不胜感激

因为您是新来的,这里有一个非常小的可重复性示例

library(data.table)
x = data.table(a=1:3,b=4:6,c=7:9)
for(... now what?
下面是一种完成任务的方法:

library(data.table)
# make some dummy data
X = data.table(a=1:2,b=3:4,c=5:6)
# make an empty result table
Y = data.table()
# for i = 1 to the number of columns in X
for(i in 1:ncol(X)){
  # colnames(X) is "a" "b" "c".
  # colnames(X)[1:1] is "a", colnames(X)[1:2] is "a" "b", colnames(X)[1:3] is "a" "b" "c"
  # paste0(colnames(X)[1:1],collapse='') is "a",
  # paste0(colnames(X)[1:2],collapse='') is "ab",
  # paste0(colnames(X)[1:3],collapse='') is "abc"
  newcolname = paste0(colnames(X)[1:i],collapse='')
  # Y[,(newcolname):= is data.table syntax to create a new column called newcolname
  # X[,1:i] selects columns 1 to i
  # rowSums calculates the, um, row sums :D
  Y[,(newcolname):=rowSums(X[,1:i])]
}

因为你是新来的,这里有一个最小可复制的例子

library(data.table)
x = data.table(a=1:3,b=4:6,c=7:9)
for(... now what?
下面是一种完成任务的方法:

library(data.table)
# make some dummy data
X = data.table(a=1:2,b=3:4,c=5:6)
# make an empty result table
Y = data.table()
# for i = 1 to the number of columns in X
for(i in 1:ncol(X)){
  # colnames(X) is "a" "b" "c".
  # colnames(X)[1:1] is "a", colnames(X)[1:2] is "a" "b", colnames(X)[1:3] is "a" "b" "c"
  # paste0(colnames(X)[1:1],collapse='') is "a",
  # paste0(colnames(X)[1:2],collapse='') is "ab",
  # paste0(colnames(X)[1:3],collapse='') is "abc"
  newcolname = paste0(colnames(X)[1:i],collapse='')
  # Y[,(newcolname):= is data.table syntax to create a new column called newcolname
  # X[,1:i] selects columns 1 to i
  # rowSums calculates the, um, row sums :D
  Y[,(newcolname):=rowSums(X[,1:i])]
}

也许你需要像下面那样减少

cbind(
  df,
  setNames(
    as.data.frame(Reduce(`+`, df, accumulate = TRUE)),
    Reduce(paste0, names(df), accumulate = TRUE)
  )
)
以致

  a b c a ab abc
1 1 4 7 1  5  12
2 2 5 8 2  7  15
3 3 6 9 3  9  18
数据

df <- structure(list(a = 1:3, b = 4:6, c = 7:9), class = "data.frame", row.names = c(NA, 
-3L))

df也许你需要
Reduce
如下

cbind(
  df,
  setNames(
    as.data.frame(Reduce(`+`, df, accumulate = TRUE)),
    Reduce(paste0, names(df), accumulate = TRUE)
  )
)
以致

  a b c a ab abc
1 1 4 7 1  5  12
2 2 5 8 2  7  15
3 3 6 9 3  9  18
数据

df <- structure(list(a = 1:3, b = 4:6, c = 7:9), class = "data.frame", row.names = c(NA, 
-3L))

df欢迎来到stack。这里的想法是给出一个最小的可重复示例(),以便其他人可以使用您的示例给出答案。如果你能给出你迄今为止尝试过的代码,我也会很感激的。嗨,很抱歉,我现在使用的代码是CoEig1=coeiframe[,1]CoEig2=coeiframe[,1]+coeiframe[,2]CoEig3=coeiframe[,1]+coeiframe[,2]+coeiframe[,3]dataFrame=cbind(CoEig1,CoEig2,CoEig3)coeifFrame是一个数值的数据帧,但是我想要的是一个for循环或者沿着这条线做这个函数的东西,而不是这个沉重的强制代码欢迎使用堆栈。这里的想法是给出一个最小的可重复示例(),以便其他人可以使用您的示例给出答案。如果你能给出你迄今为止尝试过的代码,我也会很感激的。嗨,很抱歉,我现在使用的代码是CoEig1=coeiframe[,1]CoEig2=coeiframe[,1]+coeiframe[,2]CoEig3=coeiframe[,1]+coeiframe[,2]+coeiframe[,3]dataFrame=cbind(CoEig1,CoEig2,CoEig3)coeifFrame是一个数值的数据帧,但是我想要的是一个for循环或者沿着这条线的某个东西来完成这个函数,而不是这个沉重的强制代码。嗨,我会为我的下一个查询做得更好!出现此错误消息,“行和中的错误(coeiframe[,1:i]):'x'必须是至少两个维度的数组”coeiframe只是我使用的一个数据帧,由3列数值组成,它没有列名,只有“1”、“2”、“3”您必须使用data.table才能使此代码工作,而不是data.frame。要将data.frame转换为data.table,请执行
setDT(myData)
将myData就地转换为data.table。顺便说一句,不要做
myData=setDT(myDate)
。嗨,我会为下一个查询做得更好!出现此错误消息,“行和中的错误(coeiframe[,1:i]):'x'必须是至少两个维度的数组”coeiframe只是我使用的一个数据帧,由3列数值组成,它没有列名,只有“1”、“2”、“3”您必须使用data.table才能使此代码工作,而不是data.frame。要将data.frame转换为data.table,请执行
setDT(myData)
将myData就地转换为data.table。顺便说一句,不要做
myData=setDT(myDate)