按照各自的级别对数​​据框的列进行子集,并将函数应用于每个子集

时间:2018-05-24 20:55:20

标签: r dataframe group-by lapply quantile

当我的值在“short_desc”列中只有一个因子级别时,我有一些代码可以正常工作。它取“Value”并在“Value.fc”列中输出相应的十分位数范围。

操作之前的data.frame如下所示:

dataframe before manipulation

我将这些代码行应用于数据帧“df”:

df <- df %>%
mutate(Value.fc = cut2(Value, g=10),
     Value.fc = factor(sapply(str_extract_all(Value.fc, "\\d+"),
                              function(x) paste(x, collapse="-"))),
     Value.fc = reorder(Value.fc, Value)) 

结果是列“Value.fc”,它们是十进制因子范围:

manipulated dataframe

当“short_desc”列有多个级别时会出现问题。

我无法通过“short_desc”对观察值进行子集化,并应用代码来获取每个子集的十分位数“Value.fc”。由此产生的十分位数范围不正确。我使用了以下代码:

df <- df %>%
group_by(short_desc) %>%
mutate(Value.fc = cut2(Value, g=10),
     Value.fc = factor(sapply(str_extract_all(Value.fc, "\\d+"),
                              function(x) paste(x, collapse="-"))),
     Value.fc = reorder(Value.fc, Value)) %>%
ungroup()

结果数据框如下所示:

grou_by() dataframe

任何指导都将不胜感激。样本数据:

dput(head(df)) structure(list(state = c("Iowa", "Iowa", "Illinois"), short_desc = c("Corn, grain - yield, measured in bu / acre", "Corn, silage - yield, measured in tons / acre", "Corn, grain - yield, measured in bu / acre"), Value = c(137.8, 13.5, 153.3), FIPS = c("19001", "19001", "17001"), Value.fc = c("135-0-150", "13-0-14-5", "150-4-157"))

0 个答案:

没有答案