如何在循环中处理A1、A2、…、a等变量?在R
我有10个不同的对象:a1,a2。。。a10。 我所需要做的就是对每个变量做一个简单的更改。 比如如何在循环中处理A1、A2、…、a等变量?在R,r,loops,R,Loops,我有10个不同的对象:a1,a2。。。a10。 我所需要做的就是对每个变量做一个简单的更改。 比如 a1$x这不起作用,因为不能通过迭代器i替换名称的一部分来调用对象。如果要进行迭代,必须首先将对象分组到一个对象中,如列表或data.frame。根据您的代码,我推断a对象是data.frames,因此这里最合理的做法是将它们存储在列表中 a1 <- data.frame(x = 1:10) a2 <- data.frame(x = 11:15) a3 <- data.frame
a1$x这不起作用,因为不能通过迭代器i
替换名称的一部分来调用对象。如果要进行迭代,必须首先将对象分组到一个对象中,如列表
或data.frame
。根据您的代码,我推断a对象是data.frames,因此这里最合理的做法是将它们存储在列表中
a1 <- data.frame(x = 1:10)
a2 <- data.frame(x = 11:15)
a3 <- data.frame(x = 16:30)
a_list <- list(a1, a2, a3)
for(i in 1:length(a_list)){
a_list[[i]]$x <- a_list[[i]]$x + 1
a_list[[i]]$x_new <- cumsum(a_list[[i]]$x)
}
如果您的数据帧具有完全相同的结构,则更方便的做法是将所有数据帧绑定到一个数据帧,并添加一个id列,该行从该数据帧生成。然后使用dplyr
对其进行更改
library(dplyr)
a_df <- rbind(a1 %>% mutate(df = 1), a2 %>% mutate(df = 2), a3 %>% mutate(df = 3))
a_df %>% mutate(x = x + 1) %>% group_by(df) %>% mutate(x_new = cumsum(x))
库(dplyr)
a_df%突变(df=1),a2%>%突变(df=2),a3%>%突变(df=3))
a_df%%>%突变(x=x+1)%%>%group_by(df)%%>%突变(x_new=cumsum(x))
如果使用eval()
函数读取对象,使用assign()
函数写入对象,则无需首先将对象转换为单个列表或数据帧,即可使用循环方法。例如:
a1 <- data.frame(x=1:5)
a2 <- data.frame(x=2:6)
a3 <- data.frame(x=3:7)
for(i in 1:3) {
dfname <- paste0("a", i)
df <- eval(parse(text=dfname))
df$new_x <- cumprod(df$x)
assign(dfname, df)
}
a1
a1使用lappy(列表(a1,a2,…,a10),函数(x)x+1)
r没有数组吗?是的,它有数组,什么类型的对象是a1,a2…
?非常感谢。这是我真正需要的答案。谢谢你的回答!我也会试试你的代码:)
a1 <- data.frame(x = 1:10)
a2 <- data.frame(x = 11:15)
a3 <- data.frame(x = 16:30)
a_list <- list(a1, a2, a3)
for(i in 1:length(a_list)){
a_list[[i]]$x <- a_list[[i]]$x + 1
a_list[[i]]$x_new <- cumsum(a_list[[i]]$x)
}
a_list <- list(a1, a2, a3)
lapply(a_list, function(df) {
df$x <- df$x + 1
df$x_new <- cumsum(df$x)
return(df)
})
library(dplyr)
a_df <- rbind(a1 %>% mutate(df = 1), a2 %>% mutate(df = 2), a3 %>% mutate(df = 3))
a_df %>% mutate(x = x + 1) %>% group_by(df) %>% mutate(x_new = cumsum(x))
a1 <- data.frame(x=1:5)
a2 <- data.frame(x=2:6)
a3 <- data.frame(x=3:7)
for(i in 1:3) {
dfname <- paste0("a", i)
df <- eval(parse(text=dfname))
df$new_x <- cumprod(df$x)
assign(dfname, df)
}
a1