在R中的数据帧上循环

在R中的数据帧上循环,r,R,我有一个数据框架,我试图分别计算每组的中位数。当我将数据帧分为两组并计算每一组的中值时,我得到了一个NA结果 数据如下: x1 x2 x3 x4 x5 x6 x7 y1 y2 y3 y4 y5 y6 y7 y8 9.488404158 9.470895414 9.282433728 9.366707445 9.955383045 9.640816474 9.606262272 9.329651027 9.434541611 9.473922432 9.

我有一个数据框架,我试图分别计算每组的中位数。当我将数据帧分为两组并计算每一组的中值时,我得到了一个
NA
结果

数据如下:

    x1  x2  x3  x4  x5  x6  x7  y1  y2  y3  y4  y5  y6  y7  y8
9.488404158 9.470895414 9.282433728 9.366707445 9.955383045 9.640816474   9.606262272   9.329651027 9.434541611 9.473922432 9.311412966 9.3154885   9.434977488 9.470895414 9.764258059
8.630629966 8.55831075  8.788391003 8.576231135 8.671587906 8.842979993 8.861958856 8.58330436  8.603596508 8.570129609 8.59798922  8.572686772 8.679751791 8.663950953 8.432875347
9.354748885 9.367668838 9.259952558 9.421538213 9.554635162 9.603744578 9.452197983 9.284228877 9.404607878 9.317737979 9.343115301 9.310644266 9.27227486  9.360337823 9.44706281
9.944863964 9.950427516 10.19101759 10.07350804 10.03269879 10.1307908  10.03487287 9.74609383  9.886379007 9.775472567 10.036596   9.544738458 9.699611598 9.911962567 9.625804277
代码:


rowN最好展示一个可重复的例子。基于循环码,在我看来OP想要得到每行的
中值。假设分别计算了列2:8和列9:16的
中值
,我们将'data.frame'转换为'matrix'(
as.matrix
),并使用
库(matrixStats)
中的
行中位数


x1最好显示一个可重复的示例。基于循环码,在我看来OP想要得到每行的
中值。假设分别计算了列2:8和列9:16的
中值
,我们将'data.frame'转换为'matrix'(
as.matrix
),并使用
库(matrixStats)
中的
行中位数


x1最好显示一个可重复的示例。基于循环码,在我看来OP想要得到每行的
中值。假设分别计算了列2:8和列9:16的
中值
,我们将'data.frame'转换为'matrix'(
as.matrix
),并使用
库(matrixStats)
中的
行中位数


x1最好显示一个可重复的示例。基于循环码,在我看来OP想要得到每行的
中值。假设分别计算了列2:8和列9:16的
中值
,我们将'data.frame'转换为'matrix'(
as.matrix
),并使用
库(matrixStats)
中的
行中位数




x1请给出一个可复制的示例。我们可以使用
aggregate/dplyr/data.table
methods.@akrun为什么循环不起作用,当我写csv文件时R会生成一个带索引的额外列,如果我使用中位数(x[,2:7]),我也会有错误:(您使用的是
write.csv
row.names=TRUE
。如果不需要额外的列,请使用
row.names=FALSE
。我没有发现您在代码中创建了
MD1
MD2
对象。我会做
MD1我已经创建了MD1,MD2:MD1请显示一个可重复的示例。我们可以使用
aggregate/dplyr/data.table
方法。@请运行循环不起作用的原因,并在写入csv文件时生成一个带索引的额外列,如果使用中位数(x[,2:7]),我也会有错误:(您使用的是
write.csv
row.names=TRUE
。如果不需要额外的列,请使用
row.names=FALSE
。我没有发现您在代码中创建了
MD1
MD2
对象。我会做
MD1我已经创建了MD1,MD2:MD1请显示一个可重复的示例。我们可以使用
aggregate/dplyr/data.table
方法。@请运行循环不起作用的原因,并在写入csv文件时生成一个带索引的额外列,如果使用中位数(x[,2:7]),我也会有错误:(您使用的是
write.csv
row.names=TRUE
。如果不需要额外的列,请使用
row.names=FALSE
。我没有发现您在代码中创建了
MD1
MD2
对象。我会做
MD1我已经创建了MD1,MD2:MD1请显示一个可重复的示例。我们可以使用
aggregate/dplyr/data.table
方法。@请运行循环不起作用的原因,并在写入csv文件时生成一个带索引的额外列,如果使用中位数(x[,2:7]),我也会有错误:(您使用的是
write.csv
row.names=TRUE
。如果不需要额外的列,请使用
row.names=FALSE
。我没有发现您在代码中创建了
MD1
MD2
对象。我会做
MD1我已经创建了MD1,MD2:MD1在第二个组(y)及其中产生错误:有50个或更多警告(使用warnings()查看前50个)@shawinkarim没有可复制的示例,我无法评论。如果我使用一些标准示例,我的代码应该可以工作。我正在键入你的名字akrun,但它会在乞讨时消失?@shawinkarim这是因为帖子的作者总是被通知的,所以在没有其他评论作者的情况下,以“@their_name”开头的消息是多余的:)就这么回事,但我同意一开始可能会令人不安(当我在评论上看到a+1时会删除此内容,这意味着它已被阅读:p)@shawinkarim,如果您想要更详细的答案,请包括一个可复制的示例(参见)这清楚地说明了问题所在。@akrun的答案很好地表明,计算矩阵每行的中位数时,不需要使用
for
循环,也应该使用数据。错误产生于第二组(y)及其:有50个或更多警告(使用warnings()查看前50个)@shawinkarim没有可复制的示例,我无法评论。如果我使用一些标准示例,我的代码应该可以工作。我正在键入你的名字akrun,但它会在乞讨时消失?@shawinkarim这是因为帖子的作者总是被通知的,所以在没有其他评论作者的情况下,以“@their_name”开头的消息是多余的:)就这么回事,但我同意一开始可能会令人不安(当我在评论上看到a+1时,我会删除这个,意思是它已被阅读:p)@shawinkarim,如果你想要更详细的答案,请包括一个可复制的例子(见),清楚地显示正在发生的事情
  rowN <- nrow(AT1)
  MD1<-vector(length=rowN)
  MD2<-vector(length=rowN)

   MD1[1:rowN]<-NA
   MD2[1:rowN]<-NA


 x<- AT1[,c(2,3,4,5,6,7,8) ]
  write.csv(x,"x.csv",row.names=TRUE)
  x<-as.matrix(x)
  for(i in 2:rowN) { 
  MD1[i]=median(x[i,])
  }
 write.csv(MD1,"MD1.csv",row.names=TRUE)

  y<- AT1[,c(9,10,11,12,13,14,15,16)]
  write.csv(y,"y.csv",row.names=TRUE)
  y<-as.matrix(y)
  for(j in 2:rowN) {
  MD2[j]=median(y[j,])
  }
  write.csv(MD2,"MD2.csv",row.names=TRUE)
x1 <- as.matrix(AT1[2:8 ])
x2 <- as.matrix(AT1[9:16])

library(matrixStats)
rowMedians(x1, na.rm=TRUE)
#[1] -0.09411013 -0.08554095  0.11953107 -0.26869311  0.33224445

rowMedians(x2, na.rm=TRUE)
#[1]  0.10557881 -0.74135403 -0.05876725  0.69230776 -0.21402339
set.seed(24)
m1 <- matrix(rnorm(5*15), ncol=15)
AT1 <- data.frame(col1= LETTERS[1:5], m1)