小编Ric*_*rdo的帖子

将数据帧添加为列表元素(使用for循环)

我在我的环境中有一系列称为EOG的数据框.从2006年到2012年,每年都有一个.例如,EOG2006,EOG2007 ...... EOG2012.我想将它们添加为列表的元素.

首先,我想知道这是否可行.我阅读了官方的R指南和一些R编程手册,但我没有找到明确的例子.

其次,我想使用for循环来做到这一点.不幸的是,我以前用来做这个工作的代码是错误的,我很疯狂地修复它.

for (j in 2006:2012){
z<-j
sEOG<-paste("EOG", z, sep="")
dEOG<-get(paste("EOG", z, sep=""))
lsEOG<-list()
lsEOG[[sEOG]]<-dEOG
}
Run Code Online (Sandbox Code Playgroud)

这将返回包含一个元素的列表.哪里出错了?

for-loop r list dataframe

12
推荐指数
2
解决办法
2万
查看次数

如何对列表中存储的data.frame进行子集化?

我创建了一个列表,并在每个组件中存储了一个数据帧.现在我想过滤那些数据帧,只保留特定列中具有NA的行.我希望此操作的结果是包含数据帧的另一个列表,其中只有那些在该列中具有NA的行.

这是一些代码,以澄清我在说什么.假设d1并且d2是我的数据框架

set.seed(1)

d1<-data.frame(a=rnorm(5), b=c(rep(2006, times=4),NA))
d2<-data.frame(a=1:5, b=c(2007, 2007, NA, NA, 2007))  

print(d1)
 a    b
 1.3011543 2006
 0.3780023 2006
-0.3101449 2006
-1.3927445 2006
-1.0726218   NA

print(d2)
a    b
1 2007
2 2007
3   NA
4   NA
5 2007
Run Code Online (Sandbox Code Playgroud)

我把它放在一个带有for循环的列表中

ls<-list()

for (i in 1:2){ 

  str<-paste("d", i, sep="")
  dat<-get(str)
  ls[[str]]<-dat

}
Run Code Online (Sandbox Code Playgroud)

现在我想过滤每个列表组件,以便只留下包含NA的列b行.为此,我尝试使用以下命令,从一开始就知道它会失败.我的问题是我不知道是否subset()使用正确的函数,如果是,我不知道如何限定每个数据框(即子集函数的第一个元素)

lsNA<-lapply(ls, subset(ls, is.na(b)))
Run Code Online (Sandbox Code Playgroud)

能帮我解决一下我的严重局限吗?

r list subset lapply dataframe

6
推荐指数
2
解决办法
1万
查看次数

使用data.table嵌套分组

data.table下面,我有关于参与项目的团队组成的信息.该变量id告诉团队ID,而变量event给出项目编号.该变量freqrel描述了团队的组成(您可以看到freqrel在每个团队中最多加1).

structure(list(id = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 
4L, 4L, 5L, 5L, 5L), event = c("127b", "127b", "127b", "127b", 
"127b", "127b", "127b", "127b", "127b", "125t", "125t", "125t", 
"125t", "125t", "125t"), membr = c("engineer", "mathematician", 
"physicist", "mathematician", "physicist", "surgeon", "dentist", 
"mathematician", "programmer", "physicist", "sociologist", "surgeon", 
"musician", "sociologist", "surgeon"), freqrel = c(0.4, 0.4, 
0.2, 0.166666666666667, 0.5, 0.333333333333333, 0.333333333333333, 
0.5, 0.166666666666667, 0.75, 0.125, 0.125, 0.444444444444444, 
0.444444444444444, 0.111111111111111)), .Names = c("id", …
Run Code Online (Sandbox Code Playgroud)

r data.table

4
推荐指数
1
解决办法
883
查看次数

使用另一个data.table子集data.table

我有dtdt1 data.tables.

dt<-data.table(id=c(rep(2, 3), rep(4, 2)), year=c(2005:2007, 2005:2006), event=c(1,0,0,0,1))
dt1<-data.table(id=rep(2, 5), year=c(2005:2009), performance=(1000:1004))

dt

   id year event
1:  2 2005     1
2:  2 2006     0
3:  2 2007     0
4:  4 2005     0
5:  4 2006     1

dt1

   id year performance
1:  2 2005        1000
2:  2 2006        1001
3:  2 2007        1002
4:  2 2008        1003
5:  2 2009        1004
Run Code Online (Sandbox Code Playgroud)

我想使用第一列和第二列的组合来对前者进行子集化dt1.因此,我想创建一个没有覆盖的新对象dt.这是我想要获得的.

   id year event
1:  2 2005     1
2:  2 2006 …
Run Code Online (Sandbox Code Playgroud)

r subset data.table

3
推荐指数
1
解决办法
305
查看次数

标签 统计

r ×4

data.table ×2

dataframe ×2

list ×2

subset ×2

for-loop ×1

lapply ×1