r - 基于列表中元素的子集数据

标签 r dataframe subset

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/

    相关文章:

    r - 根据长数据上 id 变量的值(与行号无关)为 ggplot 中的特定标签着色

    r - ggplot2 在 Shiny 的错误 : ggplot2 doesn't know how to deal with data of class packageIQR

    r - 如何使用R提取方括号之外的字符串?

    r - 在 R 中查找有理函数的局部最大值

    R - 如何对多个变量执行相同的操作

    r - 构建具有重叠观察结果的数据框

    python - 向包含值和列表的 MultiIndex pandas DataFrame 添加新行

    python - 如何从给定的数据中找到Python中的公共(public)数据对

    r - 在 R 中对数据帧的行进行子集化的更快方法?

    r - 按因子水平选择行