我有一份衣衫褴褛的清单,我想与之合作。即我想使用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中每个列表元素的第二行?
谢谢,
马特
答案 0 :(得分:0)
如果将矢量存储在数据框中,则可以进行子集化。
> df <- data.frame(vectors.list)
> row2 <- df[2,]
> row2
x x.1 x.2
2 D D C
答案 1 :(得分:0)
作为最终输出格式,您并不是很清楚,但您可能想尝试以下模板的变体:
lapply(vectors.list, function(x) x[2, , drop = FALSE])
# [[1]]
# x
# 2 D
#
# [[2]]
# x
# 2 D
#
# [[3]]
# x
# 2 C
在这里,我们刚刚将一个匿名函数(function(x)
)传递给了&#34; vectors.list&#34;中的项目。在这种情况下,我们使用[
使用基本子集来提取第二行。 drop = FALSE
是保留data.frame
结构,因为结果是单列data.frame
(通常简化为vector
)。
请注意,生成的data.frame
中的list
仍然包含&#34; x&#34;的所有原始levels
。 factor
。如果您只想保留该行中的特定因子,请使用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, ])
。