在 R
,我正在尝试对 data.frame
进行子集化命名 Data
通过使用存储在 list
中的元素.
数据
Data <- read.table(text = " Data_x Data_y Column_X
-34 12 A
-36 20 D
-36 12 E
-34 18 F
-34 10 B
-35 24 A
-35 16 B
-33 22 B
-33 14 C
-35 22 D", header = T)
代码
variableData <- list("A", "B")
subsetData_1 <- subset(Data, Column_X == variableData[1])
subsetData_2 <- subset(Data, Column_X == variableData[2])
subsetData <- rbind(subsetData_1, subsetData_2)
问题
list
中的元素可以多于两个并且不是固定的。甚至可以有 100 多个元素。 data.frame
它将存储使用 list
中的所有元素提取的所有子集数据.如果有更多元素,比如说100,那么我不想重复subset()
对于每个元素。 有没有比上面的代码更好的方法来解决这个问题?因为我的方法不够好,会影响性能。
任何建议都会有所帮助,谢谢。
最佳答案
经典lapply
.
x <- lapply(variableData, function(x){subset(Data, Column_X == x)})
x
# [[1]]
# Data_x Data_y Column_X
# 1 -34 12 A
# 6 -35 24 A
#
# [[2]]
# Data_x Data_y Column_X
# 5 -34 10 B
# 7 -35 16 B
# 8 -33 22 B
它返回所有子集的列表。致
rbind
所有这些列表元素只是do.call(rbind, x)
# Data_x Data_y Column_X
# 1 -34 12 A
# 6 -35 24 A
# 5 -34 10 B
# 7 -35 16 B
# 8 -33 22 B
但是,正如@Frank 指出的那样,您可以在代码中使用基本子集:
Data[Data$Column_X %in% variableData,]
# Data_x Data_y Column_X
# 1 -34 12 A
# 5 -34 10 B
# 6 -35 24 A
# 7 -35 16 B
# 8 -33 22 B
"Warning
This is a convenience function intended for use interactively. For programming it is better to use the standard subsetting functions like
[
, and in particular the non-standard evaluation of argument subset can have unanticipated consequences." (?subset
)
此外,因此您的行的顺序将被保留。
关于r - 基于列表中元素的子集数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45360423/