我在我的环境中有一系列称为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)
这将返回包含一个元素的列表.哪里出错了?
我创建了一个列表,并在每个组件中存储了一个数据帧.现在我想过滤那些数据帧,只保留特定列中具有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)
能帮我解决一下我的严重局限吗?
在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) 我有dt和dt1 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)