首页 > 解决方案 > 如何选择列中具有相等值的行

问题描述

我有来自巴西的所有城市的完整数据框。我只想要一些预定义的城市。我有一个包含这些预定义城市的专栏。然后我想使用我的数据框中的所有列,但只选择与所有城市的列城市和与预定义城市的列重合的行。

data = read.csv(file="C:/Users/guilherme/Desktop/data.csv", header=TRUE, sep=";")
data
> AllCities Year1990 Year200 PredefinedCities
1         A        2       4                C
2         B        2       2                A
3         C        3       4                F
4         D        4       2                 
5         E        5       6                 
6         F        6       2                 

我想要以下

> data
  AllCities Year1990 Year200 PredefinedCities
1         C        3       4                C
2         A        2       4                A
3         F        6       2                F

标签: rdatabase

解决方案


使用 R 基础

选项1

> data[data$AllCities %in% data$PredefinedCities, -ncol(data)]
      AllCities Year1990 Year200
    1         A        2       4
    3         C        3       4
    6         F        6       2

选项 2

> subset(data, AllCities %in% PredefinedCities, select = -PredefinedCities)
  AllCities Year1990 Year200
1         A        2       4
3         C        3       4
6         F        6       2

请注意,PredefinedCities最终 data.frame 中的列不会保持与原始数据框中相同的顺序,所以我跳过了它

dplyr 方法:

> library(dplyr)
> data %>% 
    filter(AllCities %in% PredefinedCities) %>% 
    select(-PredefinedCities)
  AllCities Year1990 Year200
1         A        2       4
2         C        3       4
3         F        6       2

数据

data <- structure(list(AllCities = c("A", "B", "C", "D", "E", "F"),
                       Year1990 = c(2L,2L, 3L, 4L, 5L, 6L),
                       Year200 = c(4L, 2L, 4L, 2L, 6L, 2L),
                       PredefinedCities = c("C","A", "F", NA, NA, NA)), 
                  class = "data.frame", 
                  row.names = c("1", "2", "3", "4", "5", "6"))

推荐阅读