for-loop - 使用for循环subsetting数据帧的列表

  显示原文与译文双语对照的内容

我的问题是为什么最后一个语句"一个 <。"在列表中给我一个数据框子子集,但是我会通过列表中的所有数据?


time <- c(1:20)
temp <- c(2,3,4,5,6,2,3,4,5,6,2,3,4,5,6,2,3,4,5,6)
data <- data.frame(time,temp)

tmp <- c(1,diff(data[[2]]))
tmp2 <- tmp <0
tmp3 <- cumsum(tmp2)
data1 <- split(data, tmp3)

#this does not work. I want to automate the successful process below through all data frames in the list"data1"
for(i in 1:length(data1)){
 finale[i] <- subset(data1[[i]], data1[[i]][,2]> 3)
}

#this works to give me a part of what I want
a <- subset(data1[[1]], data1[[1]][,2]> 3)

时间: 作者:

也许你想试试 lapply


lapply(data1, function(x) subset(x, x[,2]>3))

使用 for 循环的相同结果


finale <- vector("list", length(data1))
for(i in 1:length(data1)){
 finale[[i]] <- subset(data1[[i]], data1[[i]][,2]> 3)
}

因为我预先分配了一个类型和一个长度,它不适合你,因为你没有声明 finale 应该是什么。

作者:

你正在尝试将 data.frame ( 2d 对象) 保存在向量( 1d objetc ) 中。 只要将 finale 定义为列表,代码就会工作:


time <- c(1:20)
temp <- c(2,3,4,5,6,2,3,4,5,6,2,3,4,5,6,2,3,4,5,6)
data <- data.frame(time,temp)

tmp <- c(1,diff(data[[2]]))
tmp2 <- tmp <0
tmp3 <- cumsum(tmp2)
data1 <- split(data, tmp3)

#this does not work. I want to automate the successful process below through all data frames in the list"data1"
finale <- vector(mode='list')
for(i in 1:length(data1)){
 finale[[i]] <- subset(data1[[i]], data1[[i]][,2]> 3) # Use [[i]] instead of [i]
}

要保存全部 1 data.frame,请执行以下操作:


finale <- do.call(rbind, finale)

作者:
...