#r #dplyr
#r #dplyr
Вопрос:
Как я могу идентифицировать и сгенерировать новую переменную, которая определяет, какие наблюдения принадлежат к разным группам. Допустим, у меня есть следующий набор данных:
ID | country | side
1 | arg | 1
1 | usa | 0
2 | ita | 1
2 | usa | 0
2 | uk | 1
3 | aus | 0
3 | uk | 1
и я хочу создать новую переменную (sideUK), которая определяет, была ли страна «великобритания» задействована в идентификаторе и стороне каждой страны. Так, например, это было бы:
ID | country | side | sideuk
1 | arg | 1 | 0
1 | usa | 0 | 0
2 | ita | 1 | 1
2 | usa | 0 | 0
2 | uk | 1 | 1
3 | aus | 0 | 0
3 | uk | 1 | 1
Ответ №1:
Я не совсем уверен, что вам нужно, но следующее воспроизводит ваш ожидаемый результат
library(dplyr)
df %>%
group_by(ID) %>%
mutate(sideuk = ("uk" %in% country amp; side == 1)) %>%
ungroup()
## A tibble: 7 x 4
# ID country side sideuk
# <int> <fct> <int> <int>
#1 1 arg 1 0
#2 1 usa 0 0
#3 2 ita 1 1
#4 2 usa 0 0
#5 2 uk 1 1
#6 3 aus 0 0
#7 3 uk 1 1
Выборочные данные
df <- read.table(text =
"ID country side
1 arg 1
1 usa 0
2 ita 1
2 usa 0
2 uk 1
3 aus 0
3 uk 1", header = T)
Ответ №2:
Вы хотите сгруппировать по идентификатору, а затем проверить наличие 'uk'
в country
переменной
df %>%
group_by(ID, side) %>%
mutate(sideuk = as.integer('uk' %in% country))
# A tibble: 7 x 4
# Groups: ID, side [6]
ID country side sideuk
<dbl> <fct> <dbl> <int>
1 1 arg 1 0
2 1 usa 0 0
3 2 ita 1 1
4 2 usa 0 0
5 2 uk 1 1
6 3 aus 0 0
7 3 uk 1 1
Ответ №3:
Я не уверен, что это то, что вы ищете. Это решение без внешних библиотек:
df$sideuk <- apply(df, 1, function(row) {
return(
as.integer(any(df[df$ID==row["ID"] amp; df$country=="uk" amp; row["side"] == 1, "side"]))
)
})
ВОЗВРАТ:
ID country side sideuk
1 1 arg 1 0
2 1 usa 0 0
3 2 ita 1 1
4 2 usa 0 0
5 2 uk 1 1
6 3 aus 0 0
7 3 uk 1 1
8 4 mx 1 0
9 4 uk 0 0
Выборочные данные
df <- read.table(text =
"ID country side
1 arg 1
1 usa 0
2 ita 1
2 usa 0
2 uk 1
3 aus 0
3 uk 1
4 mx 1
4 uk 0", header = T)