基于R中包含变量名的对象的子集数据框
Subset dataframe based on object containing variable name in R
我有一个可以更改的对象 (var
),其中包含数据框 df
的任何变量的名称。我正在尝试创建一个可以根据此变量的值进行子集化的循环。
df[df$var == "value", 3]
for(l in levels(outcome){
for(i in names(df)){
list <- table(df[df$i == l, 3])
}
}
上面的循环应该 return 数据框中每个变量的表列表,当该变量等于特定值时。
以下面的玩具数据集为例:
df <- data.frame(person, salary, haircolor, outcome)
head(df)
person salary haircolor outcome
1 John Doe 21000 black married
2 Peter Gynn 23400 blonde divorced
3 Jolie Hope 26800 blonde divorced
4 Tom Hanks 40000 brown married
5 Angelina Jolie 20330 brown divorced
6 Peter Pan 23020 blonde married
对于 l == married
的所有值,如果 i = outcome
(但 i
可以是任何东西,这就是重点),预期输出如下:
>table(df[df$outcome == 'married', 3])
black blonde brown
2 1 0
但是,我想强调的是,变量名称和值是要循环遍历每个变量的,因此可以更改。
也许编写一个函数会有所帮助:
get_counts <- function(data, i, l) {
table(data[data[[i]] == l, 3])
}
然后您可以将列名和值传递给数据框中的子集并使用 table
进行计数
get_counts(df, 'outcome', 'married')
# black blonde brown
# 1 1 1
我有一个可以更改的对象 (var
),其中包含数据框 df
的任何变量的名称。我正在尝试创建一个可以根据此变量的值进行子集化的循环。
df[df$var == "value", 3]
for(l in levels(outcome){
for(i in names(df)){
list <- table(df[df$i == l, 3])
}
}
上面的循环应该 return 数据框中每个变量的表列表,当该变量等于特定值时。
以下面的玩具数据集为例:
df <- data.frame(person, salary, haircolor, outcome)
head(df)
person salary haircolor outcome
1 John Doe 21000 black married
2 Peter Gynn 23400 blonde divorced
3 Jolie Hope 26800 blonde divorced
4 Tom Hanks 40000 brown married
5 Angelina Jolie 20330 brown divorced
6 Peter Pan 23020 blonde married
对于 l == married
的所有值,如果 i = outcome
(但 i
可以是任何东西,这就是重点),预期输出如下:
>table(df[df$outcome == 'married', 3])
black blonde brown
2 1 0
但是,我想强调的是,变量名称和值是要循环遍历每个变量的,因此可以更改。
也许编写一个函数会有所帮助:
get_counts <- function(data, i, l) {
table(data[data[[i]] == l, 3])
}
然后您可以将列名和值传递给数据框中的子集并使用 table
get_counts(df, 'outcome', 'married')
# black blonde brown
# 1 1 1