在RStudio中,我想向数据框添加两个新列。这两个列应基于数据框中已有的列中的条件语句填充文本。
Data.frame
变量为:数字c(1,2,3,4,等等。)
我需要一个代码(语句),该代码根据“数字”列中的数字创建并填写两个新列“ type_a”和“ type_b”。我必须使用确切的数字,因此“如果“数字”中的1填写“ some_text1”的“ type_a”,然后用“ some_text2”填写“ type_b”,下一行将是“如果数字中的2或3”用“ some_text3”输出“ type_a”,用“ some_text4”输出“ type_b”。
这应该很简单,但是,我是R的新手,并且正在学习课程。
谢谢
编辑:
由于下面的回答,我现在已经可以使用此代码完成我想做的事情。现在的问题是,我可以以某种方式在第一个“ case_when”中包含“ type_b”语句,这样我就不必两次写数字列表,还是每个“ case_when”仅包含一列? (在SAS中,我将首先创建两列type_a和type_b,然后输入“如果(1,2,4,6)中的数字,则执行; type_a ='some_text'; type_b ='some_text2; end;)。
谢谢
ds <- tibble(number = 1:6)
ds %>%
mutate(
type_a = case_when(
number %in% c(1,2,4,6) ~ "some_text", TRUE ~ NA_character_
),
type_b = case_when(
number %in% c(1,2,4,6) ~ "some_text2", TRUE ~NA_character_
)
)
#The code below do not work, but hopefully you get the idea!
library(tidyverse)
ds <- tibble(number = 1:6)
ds %>%
mutate(
type_a, type_b = case_when(
number %in% c(1,2,4,6) ~ "some_text", ~ "some_text2",
TRUE ~ NA_character_))
答案 0 :(得分:0)
您可以使用密钥创建一个数据框以替换并使用merge
函数:
n <- 4
df <- data.frame(number = sample(1:n, 10, replace = TRUE))
df
> number
1 2
2 2
3 1
4 4
5 4
6 1
7 4
8 3
9 1
10 3
df_text <- data.frame(number = 1:n, text_a = paste0("text", 1:n), text_b = paste0("text", 1:n+n))
df_text
> number text_a text_b
1 1 text1 text5
2 2 text2 text6
3 3 text3 text7
4 4 text4 text8
merge(df, df_text)
> number text_a text_b
1 1 text1 text5
2 1 text1 text5
3 1 text1 text5
4 2 text2 text6
5 2 text2 text6
6 3 text3 text7
7 3 text3 text7
8 4 text4 text8
9 4 text4 text8
10 4 text4 text8
如果订单很重要,您可以在sort = FALSE
中使用merge
答案 1 :(得分:0)
如果您刚开始使用R,我建议您看一下Hadley Wickham撰写的“ R for data science”(https://r4ds.had.co.nz/)。很棒的资源。
以下是我认为您要尝试执行的操作的解决方案:
library(tidyverse)
ds <- tibble(number = 1:5)
ds %>%
mutate(
type_a = case_when(
number == 1 ~ "some_text1",
number == 2 | number == 3 ~ "some_text3",
TRUE ~ NA_character_
),
type_b = case_when(
number == 1 ~ "some_text2",
number == 2 | number == 3 ~ "some_text4",
TRUE ~ NA_character_
)
)