基于多个条件的 if else 语句
if else statement based on multiple conditions
我有以下 table,代表 child,他的兄弟姐妹和他们被分配到的案例。资源 id 表示将它们放在一起的房子。
child_id|sibling_id|case_id|resource_id
1 8 123 12856
1 9 123 12856
3 11 321 12555
4 12 323 10987
4 13 323 10956
6 14 156 10554
6 15 156 10554
10 16 156 10553
10 17 145 18986
10 18 145 18986
我想创建一个新列 placed_together
,其中显示 yes
或 no
那些 children 根据他们的 [=15] 放在一起=]秒。所以我的结果应该是这样的
child_id|sibling_id|case_id|resource_id|placed_together
1 8 123 12856 Yes
1 9 123 12856 Yes
3 11 321 12555 No
4 12 323 10987 No
4 13 323 10956 No
6 14 156 10554 No
6 15 156 10554 No
10 16 156 10553 No
10 17 145 18986 Yes
10 18 145 18986 Yes
如有任何帮助,我们将不胜感激。我不知道如何根据这些条件创建 if 语句,因为 case_id 对于一个组可能是相同的,但它们的资源 ID 对于其中一个 child.
可能不同
假设你的数据框被命名为 df,你可以这样做:
# create a function that defines if a child is placed together
IsPlacedTogether = function(x, y) ifelse(sum(x == y) > 1, 'Yes', 'No')
# apply this function to every child in your data
df$placed_together = sapply(df$case_id, IsPlacedTogether, df$case_id)
可能使用 tidyverse
:
library(tidyverse)
df %>%
group_by(case_id) %>%
mutate(placedTogether = if_else(n()>1 &length(unique(child_id))==1 &
length(unique(resource_id))==1, "Yes", "No"))
# A tibble: 10 x 5
# Groups: case_id [5]
child_id sibling_id case_id resource_id placedTogether
<int> <int> <int> <int> <chr>
1 1 8 123 12856 Yes
2 1 9 123 12856 Yes
3 3 11 321 12555 No
4 4 12 323 10987 No
5 4 13 323 10956 No
6 6 14 156 10554 No
7 6 15 156 10554 No
8 10 16 156 10553 No
9 10 17 145 18986 Yes
10 10 18 145 18986 Yes
我有以下 table,代表 child,他的兄弟姐妹和他们被分配到的案例。资源 id 表示将它们放在一起的房子。
child_id|sibling_id|case_id|resource_id
1 8 123 12856
1 9 123 12856
3 11 321 12555
4 12 323 10987
4 13 323 10956
6 14 156 10554
6 15 156 10554
10 16 156 10553
10 17 145 18986
10 18 145 18986
我想创建一个新列 placed_together
,其中显示 yes
或 no
那些 children 根据他们的 [=15] 放在一起=]秒。所以我的结果应该是这样的
child_id|sibling_id|case_id|resource_id|placed_together
1 8 123 12856 Yes
1 9 123 12856 Yes
3 11 321 12555 No
4 12 323 10987 No
4 13 323 10956 No
6 14 156 10554 No
6 15 156 10554 No
10 16 156 10553 No
10 17 145 18986 Yes
10 18 145 18986 Yes
如有任何帮助,我们将不胜感激。我不知道如何根据这些条件创建 if 语句,因为 case_id 对于一个组可能是相同的,但它们的资源 ID 对于其中一个 child.
可能不同假设你的数据框被命名为 df,你可以这样做:
# create a function that defines if a child is placed together
IsPlacedTogether = function(x, y) ifelse(sum(x == y) > 1, 'Yes', 'No')
# apply this function to every child in your data
df$placed_together = sapply(df$case_id, IsPlacedTogether, df$case_id)
可能使用 tidyverse
:
library(tidyverse)
df %>%
group_by(case_id) %>%
mutate(placedTogether = if_else(n()>1 &length(unique(child_id))==1 &
length(unique(resource_id))==1, "Yes", "No"))
# A tibble: 10 x 5
# Groups: case_id [5]
child_id sibling_id case_id resource_id placedTogether
<int> <int> <int> <int> <chr>
1 1 8 123 12856 Yes
2 1 9 123 12856 Yes
3 3 11 321 12555 No
4 4 12 323 10987 No
5 4 13 323 10956 No
6 6 14 156 10554 No
7 6 15 156 10554 No
8 10 16 156 10553 No
9 10 17 145 18986 Yes
10 10 18 145 18986 Yes