让我们说我的数据框看起来像这样......
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;功能。
答案 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)
使用dplyr
和tidyr
:
mat %>%
filter(City %in% c("x", "y", "a")) %>%
group_by(City) %>%
mutate(Index = 1:n()) %>%
spread(City, Number) %>%
select(-Index)