R:找出数据框中类别的相应值

时间:2016-05-06 16:33:01

标签: r

我的原始数据有大约1000个观测值,并具有以下变量。

$Nationality : Factor "American" "Korean" ...

$Food : Factor "Milk" "Fruits" "Rice"

$No. of servings : num 5 6 3

我想构建一个表格,显示$ national == American,他们吃的$ Food是什么,以及相应的$ No.服务。

由于我的原始数据很大,我试图首先使用以下数据对数据进行子集化: American = subset(originaldata, $Nationality == "American"),用于创建仅包含美国国籍记录的数据框。

然后我使用:table(American$Food, American$No. of servings)

对子集数据(即美国人)应用table()函数

结果不仅包含$Nationality == "American"条记录,还包含所有其他国籍记录。

为什么会这样?有没有办法解决这个问题?我想要一个只包含Nationality == American记录的表格,显示$Food$No的数据。两列中的份量。

3 个答案:

答案 0 :(得分:1)

您可以按国籍分割数据,然后提取“美国人”,

list1 <- split(originaldata, originaldata$Nationality)
list1$American
#  Nationality   Food No.ofServings
#1    American Fruits             3
#2    American   rise             5
#5    American  pasta             9

数据

dput(originaldata)
structure(list(Nationality = structure(c(1L, 1L, 3L, 2L, 1L), .Label = c("American", 
"British", "Korean"), class = "factor"), Food = structure(c(1L, 
4L, 2L, 1L, 3L), .Label = c("Fruits", "meat", "pasta", "rise"
), class = "factor"), No.ofServings = c(3, 5, 6, 2, 9)), .Names = c("Nationality", 
"Food", "No.ofServings"), row.names = c(NA, -5L), class = "data.frame")

答案 1 :(得分:0)

或使用dplyr包:

install.packages("dplyr")

library(dplyr)

AmericanData = filter(yourdata, Nationality == "American")

答案 2 :(得分:0)

对于大规模数据,请使用data.table。 如果我正确理解你的问题,那么应该可以通过以下方式实现

library(data.table)
dt= as.data.table(your_data)
dt[,.SD,Nationality]

使用@sotos提供的数据看起来像

dt <- as.data.table(x)
> dt[,.SD,Nationality]
   Nationality   Food No.ofServings
1:    American Fruits             3
2:    American   rise             5
3:    American  pasta             9
4:      Korean   meat             6
5:     British Fruits             2
过滤很容易过滤

> dt[Nationality=="American"]
   Nationality   Food No.ofServings
1:    American Fruits             3
2:    American   rise             5
3:    American  pasta             9