Che*_*til 7 r subset dataframe
在 中R,我尝试 使用存储在 中的元素data.frame对命名进行子集化。Datalist
数据
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)
Run Code Online (Sandbox Code Playgroud)
代码
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)
Run Code Online (Sandbox Code Playgroud)
问题
list可以多于两个且不固定。甚至可以有超过 100 个元素。data.frame,它将存储使用 中的所有元素提取的所有子集数据list。如果有更多元素,比如说 100 个,那么我不想subset()对每个元素重复。有没有比上面的代码更好的方法来解决这个问题?因为我的方法不够好,并且会影响性能。
任何建议都会有帮助,谢谢。
hi-*_*zir 10
%in%应该做的伎俩:
subset(Data, Column_X %in% variableData)
Run Code Online (Sandbox Code Playgroud)
您还可以使用dplyr和过滤:
Data %>% filter(Column_X %in% variableData)
Run Code Online (Sandbox Code Playgroud)
经典的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
Run Code Online (Sandbox Code Playgroud)
它返回所有子集的列表。对于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
Run Code Online (Sandbox Code Playgroud)
但是,正如 @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
Run Code Online (Sandbox Code Playgroud)
“警告
这是一个旨在交互使用的便利功能。对于编程,最好使用标准子集函数,例如
[,特别是参数子集的非标准评估可能会产生意想不到的后果。” (?subset)
此外,因此行的顺序将被保留。