如何通过 r 中的值列表对数据框进行子集化


您可以使用以下方法之一通过 R 中的值列表来子定义数据框:

方法一:使用Base R

 df_new <- df[df$my_column %in% vals,]

方法2:使用dplyr

 library (dplyr)

df_new <- filter(df, my_column %in% vals)

方法3:使用data.table

 library (data.table)

df_new <- setDT(df, key=' my_column ')[J(vals)]

以下示例展示了如何在 R 中使用以下数据框来实际使用这些方法:

 #create data frame
df <- data. frame (team=c('A', 'B', 'B', 'B', 'C', 'C', 'C', 'D'),
                 points=c(12, 22, 35, 34, 20, 28, 30, 18),
                 assists=c(4, 10, 11, 12, 12, 8, 6, 10))

#view data frame
df

  team points assists
1 to 12 4
2 B 22 10
3 B 35 11
4 B 34 12
5 C 20 12
6 C 28 8
7 C 30 6
8 D 18 10

方法1:通过R库中的值列表来获取数据框的子集

以下代码显示如何对数据框进行子集化,使其仅包含团队列中具有“A”或“C”值的行:

 #define values to subset by
vals <- c(' A ', ' C ')

#subset data frame to only contain rows where team is 'A' or 'C'
df_new <- df[df$team %in% vals,]

#view results
df_new

  team points assists
1 to 12 4
5 C 20 12
6 C 28 8
7 C 30 6

生成的数据框仅包含“团队”列中具有“A”或“C”值的行。

请注意,我们在本示例中使用了基本的 R 函数,因此无需加载任何其他包。

方法2:通过dplyr中的值列表获取Dataframe子集

以下代码显示如何使用dplyr包中的filter()函数对数据框进行子集化,以仅包含team列中值为“A”或“C”的行:

 library (dplyr)

#define values to subset by
vals <- c(' A ', ' C ')

#subset data frame to only contain rows where team is 'A' or 'C'
df_new <- filter(df, team %in% vals)

#view results
df_new

  team points assists
1 to 12 4
5 C 20 12
6 C 28 8
7 C 30 6

生成的数据框仅包含“团队”列中具有“A”或“C”值的行。

方法3:通过data.table中的值列表对dataframe进行子集化

以下代码显示如何使用data.table包中的函数对数据框进行子集化,以仅包含team列中具有“A”或“C”值的行:

 library (data.table)

#define values to subset by
vals <- c(' A ', ' C ')

#subset data frame to only contain rows where team is 'A' or 'C'
df_new <- setDT(df, key=' team ')[J(vals)]

#view results
df_new

   team points assists
1: A 12 4
2: C 20 12
3: C 28 8
4: C 30 6

生成的数据框仅包含“团队”列中具有“A”或“C”值的行。

相关:如何在 R 中使用 %in% 运算符(附示例)

其他资源

以下教程解释了如何在 R 中执行其他常见任务:

如何在 R 中按因子级别对数据框进行子集化
如何在 R 中按日期范围进行子定义
如何在 R 中绘制数据框的子集

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注