[英]How can I access components of list elements in R
我有一个参差不齐的清单,我想合作。 即我想使用一个apply函数来快速简单地从列表中提取元素。 以下代码尝试近似我的情况:
vec1 <- c("B","D","E","NA")
vec2 <- c("B","D","E","NA")
vec3 <- c("B","C","E","NA")
write.table(vec1, file="./vec1.csv", sep=",", quote=F)
write.table(vec2, file="./vec2.csv", sep=",", quote=F)
write.table(vec3, file="./vec3.csv", sep=",", quote=F)
vectors.files <- list.files(path=getwd(),recursive=F, pattern=paste("*.csv",sep=""))
vectors.list <- lapply(vectors.files, read.csv)
那么,我如何才能创建一个新对象,例如,它是vectors.list中每个列表元素的第二行?
谢谢,
马特
如果将向量存储在数据框中,则可以子集化。
> df <- data.frame(vectors.list)
> row2 <- df[2,]
> row2
x x.1 x.2
2 D D C
目前尚不清楚最终输出格式是什么,但是您可能想尝试以下模板的变体:
lapply(vectors.list, function(x) x[2, , drop = FALSE])
# [[1]]
# x
# 2 D
#
# [[2]]
# x
# 2 D
#
# [[3]]
# x
# 2 C
在这里,我们刚刚将匿名函数( function(x)
)传递给“ vectors.list”中的项目。 在这种情况下,我们使用了使用[
基本子集来提取第二行。 drop = FALSE
将保留data.frame
结构,因为结果是单列data.frame
(通常简化为vector
)。
请注意,结果list
中的data.frame
仍然具有“ x” factor
所有原始levels
。 如果您只想保留该行中的特定因素,请使用droplevels
。
相比:
str(lapply(vectors.list, function(x) x[2, , drop = FALSE]))
# List of 3
# $ :'data.frame': 1 obs. of 1 variable:
# ..$ x: Factor w/ 3 levels "B","D","E": 2
# $ :'data.frame': 1 obs. of 1 variable:
# ..$ x: Factor w/ 3 levels "B","D","E": 2
# $ :'data.frame': 1 obs. of 1 variable:
# ..$ x: Factor w/ 3 levels "B","C","E": 2
str(lapply(vectors.list, function(x) droplevels(x[2, , drop = FALSE])))
# List of 3
# $ :'data.frame': 1 obs. of 1 variable:
# ..$ x: Factor w/ 1 level "D": 1
# $ :'data.frame': 1 obs. of 1 variable:
# ..$ x: Factor w/ 1 level "D": 1
# $ :'data.frame': 1 obs. of 1 variable:
# ..$ x: Factor w/ 1 level "C": 1
您可能还想探索as.character(unlist(x[2, ])
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.