#r
#r
Вопрос:
Извините, если заголовок не очень понятен. У меня есть фрейм данных, df:
df <- structure(list(df = c("cat", "dog", "cat", "fish",
"dog", "cat")), row.names = c("house1a", "house1b",
"house2a", "house2b", "house3", "house4"
), class = "data.frame")
> df
df
house1a cat
house1b dog
house2a cat
house2b fish
house3 dog
house4 cat
Я хочу иметь возможность указывать типы животных в качестве имен строк, а затем иметь значение «Да» или «Нет», если они присутствуют в каждом домохозяйстве. Обратите внимание, что на домохозяйство приходится несколько строк, например. house1a и house1b оба являются house1.
Результирующий фрейм данных будет выглядеть следующим образом:
df_new <- structure(list(
house1 = c("Yes", "Yes", "No"),
house2 = c("Yes", "No", "Yes"),
house3 = c("No", "Yes", "No"),
house4 = c("Yes", "No", "No")),
row.names = c("cat", "dog",
"fish"), class = "data.frame")
> df_new
house1 house2 house3 house4
cat Yes Yes No Yes
dog Yes No Yes No
fish No Yes No No
Каков наилучший способ создать это в R?
Комментарии:
1. Попробуйте:
table(df$df, substring(rownames(df), 1, 6))
2. Спасибо! Если вы укажете это в качестве ответа, я пометлю его как решаемый
Ответ №1:
Попробуйте:
table(df$df, substring(rownames(df), 1, 6))
# house1 house2 house3 house4
# cat 1 1 0 1
# dog 1 0 1 0
# fish 0 1 0 0
Ответ №2:
Я бы сделал это
df$house <- row.names(df)
res <- dplyr::group_by(df, house)
res <- dplyr::summarise(res, containscat = "cat" %in% df, containsdog = "dog" %in% df)
> res
# A tibble: 6 x 3
house containscat containsdog
<chr> <lgl> <lgl>
1 house1a TRUE FALSE
2 house1b FALSE TRUE
3 house2a TRUE FALSE
4 house2b FALSE FALSE
5 house3 FALSE TRUE
6 house4 TRUE FALSE
Комментарии:
1. Представьте 100 разных животных. Плюс есть только 4 дома.