我尝试在R: extract maximum value in vector under certain conditions中运行代码,但一直收到错误
Error in list(id.2 = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, :
invalid subscript type 'integer'代码如下:
require(dplyr)
dat <- read.table(header = TRUE, text = "id name year job job2 cumu_job2
1 Jane 1980 Worker 0 0
1 Jane 1981 Manager 1 1
1 Jane 1982 Sales 0 0
1 Jane 1983 Sales 0 0
1 Jane 1984 Manager 1 1
1 Jane 1985 Manager 1 2
1 Jane 1986 Boss 0 0
2 Bob 1985 Worker 0 0
2 Bob 1986 Sales 0 0
2 Bob 1987 Manager 1 1
2 Bob 1988 Manager 1 2
2 Bob 1989 Boss 0 0
3 Jill 1989 Worker 0 0
3 Jill 1990 Boss 0 0")
dat %.%
group_by(id) %.%
mutate(
all_jobs = sum(unique(job) %in% c("Sales","Manager","Boss")),
cumu_max = max(cumu_job2)
) %.%
filter(all_jobs == 3, job %in% c("Sales","Boss"))
Source: local data frame [5 x 8]
Groups: id
id name year job job2 cumu_job2 all_jobs cumu_max
1 1 Jane 1982 Sales 0 0 3 2
2 1 Jane 1983 Sales 0 0 3 2
3 1 Jane 1986 Boss 0 0 3 2
4 2 Bob 1986 Sales 0 0 3 2
5 2 Bob 1989 Boss 0 0 3 2发布于 2014-03-05 22:48:18
示例代码也适用于我。但我发现,如果我尝试这样做,我可以重现类似的错误:
dat %.%
group_by(dat$id) %.%
mutate(
all_jobs = sum(unique(job) %in% c("Sales","Manager","Boss")),
cumu_max = max(cumu_job2)
) %.%
filter(all_jobs == 3, job %in% c("Sales","Boss"))也就是说,如果我输入"group_by(dat$id)“而不是"group_by(id)”
发布于 2016-02-17 17:37:32
错误
示例代码也适用于我。但是,正如schnee提到的,您可以通过将group_by(id)替换为group_by(dat$id)来创建类似的错误。可重现代码:
dat1 <- data.frame(x=c('A','A','B','B'), y=c('A','B','C','D'), val = 1:4)
dat2 <- data.frame(val = 1:4)
dat_group <- data.frame(x=c('A','A','B','B'))
# invalid subscript type 'integer'
dat1 %>%
group_by(dat1$x) %>%
mutate(y = sum(unique(y) %in% c("A","B","C")))
# invalid subscript type 'list'
dat2 %>%
group_by(dat_group$x) %>%
mutate(y = sum(unique(y) %in% c("A","B","C")))虽然第一个通常只是一个拼写错误(您可以用x替换dat$ x ),但第二个可能是一个有效的用例(尽管我建议使用join使其更简洁)。
解决方案
dplyr包不喜欢“$”的用法。尝试使用'[',例如:
dat1[,'x']引用变量也是有效的:
dat1$'x'完整代码:
dat1 %>%
group_by(dat1[,'x']) %>%
mutate(y = sum(unique(y) %in% c("A","B","C")))
dat1 %>%
group_by(dat1$'x') %>%
mutate(y = sum(unique(y) %in% c("A","B","C")))另请参阅https://github.com/hadley/dplyr/issues/433或https://github.com/hadley/dplyr/issues/1554
https://stackoverflow.com/questions/21598295
复制相似问题