如何修改列表中的某些值(在R中)
我有一个列表,由几个具有特定结构的列表组成:字符、数字序列和字符:如何修改列表中的某些值(在R中),r,list,R,List,我有一个列表,由几个具有特定结构的列表组成:字符、数字序列和字符: myList <- list(list("name1", c(2000,2001,2002), "suffix1"), list("name2", c(2000,2001,2002), "suffix2"), list("name3", c(2000,2001,2002), "suffix3") ) myList我们循环前两个列表元
myList <- list(list("name1", c(2000,2001,2002), "suffix1"),
list("name2", c(2000,2001,2002), "suffix2"),
list("name3", c(2000,2001,2002), "suffix3")
)
myList我们循环前两个列表
元素,检查元素是否为数字,然后获取值与2001:2002相交的或返回对象
myList[1:2] <- lapply(myList[1:2], function(x)
lapply(x, function(y) if(is.numeric(y)) intersect(y, 2001:2002) else y))
myList[1:2]我们循环查看前两个列表
元素,检查元素是否为数字,然后获取值与2001:2002相交的或返回对象
myList[1:2] <- lapply(myList[1:2], function(x)
lapply(x, function(y) if(is.numeric(y)) intersect(y, 2001:2002) else y))
myList[1:2]
也许有完全不同的方法来解决这个问题
这里有一个建议:
library(data.table)
DT = rbindlist(rapply(myList, function(x) if (length(x)>1) list(x) else x, how="replace"))
setnames(DT,c("name","y","s"))
# name y s
# 1: name1 2000,2001,2002 suffix1
# 2: name2 2000,2001,2002 suffix2
# 3: name3 2000,2001,2002 suffix3
DT[1:2, y := lapply(y, function(yy) yy[yy <= 2001] )]
# name y s
# 1: name1 2000,2001 suffix1
# 2: name2 2000,2001 suffix2
# 3: name3 2000,2001,2002 suffix3
库(data.table)
DT=rbindlist(rappy(myList,函数(x)if(长度(x)>1)list(x)else x,how=“replace”))
集合名(DT,c(“名称”、“y”、“s”))
#姓名y s
#1:名称1 200020012002后缀1
#2:名称2 200020012002
#3:名称3 200020012002足够x3
DT[1:2,y:=lappy(y,函数(yy)yy[yy
也许有完全不同的方法来解决这个问题
这里有一个建议:
library(data.table)
DT = rbindlist(rapply(myList, function(x) if (length(x)>1) list(x) else x, how="replace"))
setnames(DT,c("name","y","s"))
# name y s
# 1: name1 2000,2001,2002 suffix1
# 2: name2 2000,2001,2002 suffix2
# 3: name3 2000,2001,2002 suffix3
DT[1:2, y := lapply(y, function(yy) yy[yy <= 2001] )]
# name y s
# 1: name1 2000,2001 suffix1
# 2: name2 2000,2001 suffix2
# 3: name3 2000,2001,2002 suffix3
库(data.table)
DT=rbindlist(rappy(myList,函数(x)if(长度(x)>1)list(x)else x,how=“replace”))
集合名(DT,c(“名称”、“y”、“s”))
#姓名y s
#1:名称1 200020012002后缀1
#2:名称2 200020012002
#3:名称3 200020012002足够x3
DT[1:2,y:=lappy(y,函数(yy)yy[yy一个两步程序,类似于akrun的答案:
inds <- lapply(myList, function(x) which(x[[2]] %in% 2002:2003))
myList2 <- lapply(1:length(myList), function(x) list(myList[[x]][[1]],
myList[[x]][[2]][-inds[[x]]],
myList[[x]][[3]]))
inds与akrun的答案类似的两步程序:
inds <- lapply(myList, function(x) which(x[[2]] %in% 2002:2003))
myList2 <- lapply(1:length(myList), function(x) list(myList[[x]][[1]],
myList[[x]][[2]][-inds[[x]]],
myList[[x]][[3]]))
inds您需要循环还是isL您需要循环还是isL