拉特定行

时间:2015-07-07 19:49:38

标签: r dataframe extraction

让我们说我的数据框看起来像这样......

City <- c("x","x","y","y","z","z","a","a")
Number <-c(1,2,3,4,5,6,7,8)

mat <- cbind.data.frame(City ,Number)

"City"  "Number"
     x          1
     x          2  
     y          3
     y          4
     z          5
     z          6
     a          7
     a          8

现在我希望能够为...提取数据

list <- c("x","y", "a")

期望的出局看起来像这样......

x  y a 
1  3 7 
2  4 8 

我尝试使用哪个(在%City中列出%)来帮助查找索引以从索引中提取数据,但这不会产生我想要的行。

更新

确保当您使用Chris&#39;回答你的数据类型&#34; City&#34;是&#34; chr&#34;否则你会弹出一条错误信息,因为我在使用&#34; as.character&#34;功能。

3 个答案:

答案 0 :(得分:2)

我将变量list重命名为test,因为list是函数名称。您可以使用data.table

执行此操作
matdt <- as.data.table(mat)
setkey(matdt, City)
sapply(test, function(x) matdt[x, Number])
     x y a
[1,] 1 3 7
[2,] 2 4 8

答案 1 :(得分:1)

您需要逐个将城市名称传递给提取功能。在这种情况下,sapply将按预期提供矩阵,但如果每个城市的结果数量不同,则重新构建的对象将是列表而不是矩阵:

sapply( list, function(city) mat[ mat$City %in% city, "Number"] )
     x y a
[1,] 1 3 7
[2,] 2 4 8

答案 2 :(得分:0)

使用dplyrtidyr

mat %>%
  filter(City %in% c("x", "y", "a")) %>%
  group_by(City) %>%
  mutate(Index = 1:n()) %>%
  spread(City, Number) %>%
  select(-Index)