我的原始数据有大约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)
结果不仅包含$Nationality == "American"
条记录,还包含所有其他国籍记录。
为什么会这样?有没有办法解决这个问题?我想要一个只包含Nationality == American
记录的表格,显示$Food
和$No
的数据。两列中的份量。
答案 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