当 R 中缺少行时在数据框中搜索时设置合成 0 值
Set a synthetic 0 value while searching in dataframe when row is missing in R
我有一个 R 查询,我无法理解。这是 table 我有:
House
ownername
type
no. of babies
1
Pete
cat
1
1
Tom
dog
3
2
Chrissa
cat
4
2
Mary
dog
2
3
Pete
cat
6
3
Pete
dog
3
4
Jamie
cat
2
all
_
cat
13
all
_
dog
8
我们可以忽略ownername
,但是House
、type
和no. of babies
很重要。本质上,每个房子都有一只猫和一只狗及其相应数量的后代。 请注意,House 4 缺少一排狗,因为它没有狗,但为了这个问题,我希望它在那里。
我尝试了以下代码:
df %>% select(House, type, no. of babies)
当然,这摆脱了 ownername
,一切都保持不变,但我希望这是以下输出:
House
type
no. of babies
1
cat
1
1
dog
3
2
cat
4
2
dog
2
3
cat
6
3
dog
3
4
cat
2
4
dog
0
all
cat
13
all
dog
8
我想展示 4 号屋的那一排狗,即使它不是。婴儿行不存在。 我想弄清楚如何实现它。请注意,我不想在数据框中综合创建一行,在 House 4 中添加一排狗(我不想对其进行硬编码,而且所有者名称不一致)。我希望通过我在上面复制的 select 函数来实现这一点,并进行某种额外的修改,但我在这方面遇到了很多麻烦。
我对我正在尝试做的事情的最佳解释是创建一个查看输出的函数 table,遍历 1-4 号房屋(以及所有)以确保每个房屋都具有 animal1 和animal2 如果他们不这样做,他们会添加一个并且没有。婴儿输出为 0。此外,如果无需硬编码 'cat' 和 'dog' 即可完成此操作(例如,后面的数据帧中有相同格式的马和老鼠),那将真的很有帮助。如果没有,那完全没问题。
如果您能找到任何解决方案,请告诉我,我将不胜感激。
您需要包 tidyr
中的 complete()
函数,它会填充隐式缺失值。
代码
library(dplyr)
library(tidyr)
df %>%
select(House, type, `no. of babies`) %>%
complete(House, type, fill = list(`no. of babies` = 0))
# A tibble: 10 × 3
House type `no. of babies`
<chr> <chr> <int>
1 1 cat 1
2 1 dog 3
3 2 cat 4
4 2 dog 2
5 3 cat 6
6 3 dog 3
7 4 cat 2
8 4 dog 0
9 all cat 13
10 all dog 8
输入数据
df <- read.table(header = T, check.names = F, sep = "\t", text = "
House ownername type no. of babies
1 Pete cat 1
1 Tom dog 3
2 Chrissa cat 4
2 Mary dog 2
3 Pete cat 6
3 Pete dog 3
4 Jamie cat 2
all _ cat 13
all _ dog 8")
我有一个 R 查询,我无法理解。这是 table 我有:
House | ownername | type | no. of babies |
---|---|---|---|
1 | Pete | cat | 1 |
1 | Tom | dog | 3 |
2 | Chrissa | cat | 4 |
2 | Mary | dog | 2 |
3 | Pete | cat | 6 |
3 | Pete | dog | 3 |
4 | Jamie | cat | 2 |
all | _ | cat | 13 |
all | _ | dog | 8 |
我们可以忽略ownername
,但是House
、type
和no. of babies
很重要。本质上,每个房子都有一只猫和一只狗及其相应数量的后代。 请注意,House 4 缺少一排狗,因为它没有狗,但为了这个问题,我希望它在那里。
我尝试了以下代码:
df %>% select(House, type, no. of babies)
当然,这摆脱了 ownername
,一切都保持不变,但我希望这是以下输出:
House | type | no. of babies |
---|---|---|
1 | cat | 1 |
1 | dog | 3 |
2 | cat | 4 |
2 | dog | 2 |
3 | cat | 6 |
3 | dog | 3 |
4 | cat | 2 |
4 | dog | 0 |
all | cat | 13 |
all | dog | 8 |
我想展示 4 号屋的那一排狗,即使它不是。婴儿行不存在。 我想弄清楚如何实现它。请注意,我不想在数据框中综合创建一行,在 House 4 中添加一排狗(我不想对其进行硬编码,而且所有者名称不一致)。我希望通过我在上面复制的 select 函数来实现这一点,并进行某种额外的修改,但我在这方面遇到了很多麻烦。
我对我正在尝试做的事情的最佳解释是创建一个查看输出的函数 table,遍历 1-4 号房屋(以及所有)以确保每个房屋都具有 animal1 和animal2 如果他们不这样做,他们会添加一个并且没有。婴儿输出为 0。此外,如果无需硬编码 'cat' 和 'dog' 即可完成此操作(例如,后面的数据帧中有相同格式的马和老鼠),那将真的很有帮助。如果没有,那完全没问题。
如果您能找到任何解决方案,请告诉我,我将不胜感激。
您需要包 tidyr
中的 complete()
函数,它会填充隐式缺失值。
代码
library(dplyr)
library(tidyr)
df %>%
select(House, type, `no. of babies`) %>%
complete(House, type, fill = list(`no. of babies` = 0))
# A tibble: 10 × 3
House type `no. of babies`
<chr> <chr> <int>
1 1 cat 1
2 1 dog 3
3 2 cat 4
4 2 dog 2
5 3 cat 6
6 3 dog 3
7 4 cat 2
8 4 dog 0
9 all cat 13
10 all dog 8
输入数据
df <- read.table(header = T, check.names = F, sep = "\t", text = "
House ownername type no. of babies
1 Pete cat 1
1 Tom dog 3
2 Chrissa cat 4
2 Mary dog 2
3 Pete cat 6
3 Pete dog 3
4 Jamie cat 2
all _ cat 13
all _ dog 8")