Мои данные выглядит примерно так:Создание переменной группой (R)
CPUBID MPUBID CSEX CMOB CYRB twin twinfam
<int> <int> <int> <int> <int> <int> <int>
1 201 2 2 3 1993 0 0
2 202 2 2 11 1994 0 0
3 301 3 2 10 1983 1 1
4 302 3 2 10 1983 1 1
5 303 3 2 4 1986 0 1
6 401 4 1 8 1980 0 0
7 403 4 2 3 1997 0 0
8 801 8 2 3 1976 0 0
9 802 8 1 5 1979 0 0
10 803 8 2 9 1982 0 0
dput()
версия:
structure(list(CPUBID = c(201L, 202L, 301L, 302L, 303L, 401L,
403L, 801L, 802L, 803L), MPUBID = c(2L, 2L, 3L, 3L, 3L, 4L, 4L,
8L, 8L, 8L), CSEX = c(2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L),
CMOB = c(3L, 11L, 10L, 10L, 4L, 8L, 3L, 3L, 5L, 9L), CYRB = c(1993L,
1994L, 1983L, 1983L, 1986L, 1980L, 1997L, 1976L, 1979L, 1982L
), twin = c(0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L), twinfam = c(0L,
0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L)), .Names = c("CPUBID",
"MPUBID", "CSEX", "CMOB", "CYRB", "twin", "twinfam"), row.names = c(NA,
-10L), class = c("tbl_df", "tbl", "data.frame"))
CPUBID индивидуален ID, MPUBID является мать ID, CSEX = секс, CMOB = месяц рождения и т. д. Двойник - это двоичная переменная, указывающая, что человек является близнецом. «twinfam» - это переменная, которую я пытаюсь создать. т. е. если какой-либо член семьи является близнецом, этот двоичный показатель принимает значение == 1 для всех членов этого домохозяйства.
Я попытался с помощью:
df <- df %>% group_by(MPUBID) %>%
mutate(twinfam = as.numeric(count(twin == 1) > 0))
, но это дает мне ошибку:
Error: no applicable method for 'group_by_' applied to an object of class "logical"
Любые предложения по пути, чтобы исправить это, или, возможно, лучший путь для создания желаемой переменной? Благодарю.
Итак, для каждой переменной 'twin' как 1 вы хотите иметь вектор, имеющий' MPUBID' как 1? –
используйте 'sum' вместо' count'. Ошибка исходит из 'count' в вызове' mutate', поскольку 'dplyr :: count' работает только с кадрами данных, и вы дали ему логический вектор. Это одна из ключевых проблем с трубопроводом, поскольку сужение ошибки может быть сложным в более длинных трубах. – hrbrmstr