【发布时间】:2020-02-21 00:59:27
【问题描述】:
我正在尝试基于另一个变量在 R 中创建一个新变量。基本上我想要做的是:如果 A 列中的值 x 包含特定的字符串,那么(在新列中)写 y。
例如,在我的数据集中,我有一个名为“条件”的变量,它具有以下唯一值:
[1] "05_CL_dom" "16_CF_sub" "02_CL_sub" "01_CL_dom" "19_CF_dom" "14_CL_sub" "17_CL_dom" "10_CL_sub" "09_CL_dom" "15_CF_dom"
[11] "18_CL_sub" "06_CL_sub" "20_CF_sub" "12_CF_sub" "04_CF_sub" "08_CF_sub" "24_CF_sub" "11_CF_dom" "21_CL_dom" "22_CL_sub"
[21] "23_CF_dom" "07_CF_dom" "03_CF_dom" "13_CL_dom" "06_CL_dom" "07_CF_sub" "16_CF_dom" "03_CF_sub" "12_CF_dom" "11_CF_sub"
[31] "17_CL_sub" "14_CL_dom" "21_CL_sub" "20_CF_dom" "22_CL_dom" "19_CF_sub" "01_CL_sub" "08_CF_dom" "15_CF_sub" "13_CL_sub"
[41] "18_CL_dom" "09_CL_sub" "05_CL_sub" "23_CF_sub" "10_CL_dom" "24_CF_dom" "04_CF_dom" "02_CL_dom" "18_CF_sub" "05_CF_dom"
[51] "02_CF_sub" "03_CL_dom" "21_CF_dom" "01_CF_dom" "12_CL_sub" "19_CL_dom" "20_CL_sub" "23_CL_dom" "16_CL_sub" "22_CF_sub"
[61] "04_CL_sub" "11_CL_dom" "10_CF_sub" "06_CF_sub" "14_CF_sub" "07_CL_dom" "15_CL_dom" "08_CL_sub" "24_CL_sub" "13_CF_dom"
[71] "09_CF_dom" "17_CF_dom" "19_CL_sub" "13_CF_sub" "10_CF_dom" "16_CL_dom" "05_CF_sub" "09_CF_sub" "06_CF_dom" "03_CL_sub"
[81] "08_CL_dom" "14_CF_dom" "17_CF_sub" "21_CF_sub" "01_CF_sub" "24_CL_dom" "23_CL_sub" "22_CF_dom" "07_CL_sub" "18_CF_dom"
[91] "20_CL_dom" "04_CL_dom" "11_CL_sub" "02_CF_dom" "12_CL_dom" "15_CL_sub"
基于这些值,我想创建一个名为“conditionNEW”的新变量:
- 如果条件值包含 CL_sub -> CLsub
- 如果条件值包含 CL_dom -> CLdom
- 如果条件值包含 CF_sub -> CFsub
- 如果条件值包含 CF_dom -> CFdom
现在,我所做的是:
rawdata$conditionNEW[rawdata$condition == "01_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "02_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "03_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "04_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "05_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "06_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "07_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "08_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "09_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "10_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "11_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "12_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "13_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "14_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "15_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "16_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "17_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "18_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "19_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "20_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "21_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "22_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "23_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "24_CF_dom"] <- "CFdom"
rawdata$conditionNEW[rawdata$condition == "01_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "02_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "03_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "04_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "05_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "06_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "07_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "08_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "09_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "10_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "11_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "12_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "13_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "14_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "15_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "16_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "17_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "18_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "19_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "20_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "21_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "22_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "23_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "24_CF_sub"] <- "CFsub"
rawdata$conditionNEW[rawdata$condition == "01_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "02_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "03_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "04_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "05_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "06_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "07_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "08_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "09_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "10_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "11_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "12_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "13_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "14_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "15_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "16_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "17_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "18_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "19_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "20_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "21_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "22_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "23_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "24_CL_dom"] <- "CLdom"
rawdata$conditionNEW[rawdata$condition == "01_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "02_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "03_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "04_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "05_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "06_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "07_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "08_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "09_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "10_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "11_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "12_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "13_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "14_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "15_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "16_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "17_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "18_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "19_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "20_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "21_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "22_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "23_CL_sub"] <- "CLsub"
rawdata$conditionNEW[rawdata$condition == "24_CL_sub"] <- "CLsub"
它可以工作,但它的代码很多,感觉应该相当简单。有谁知道如何用更少的代码做到这一点?
【问题讨论】:
-
如果你想匹配一个模式,你可以像
rawdata$conditionNEW[grepl("CF_dom", rawdata$condition)] <- "CFdom"这样的东西。您可以只用 4 行代码替换所有这些代码行,每个模式一个。 -
谢谢!我发了第二张就知道了。显然,为什么当我第一次尝试 grepl 时它不起作用,是因为我的条件变量是一个因素。
-
您不应编辑您的问题以包含“答案”。如果您回答了自己的问题,则应将其作为答案放在下面。我回滚了你的编辑。如果您愿意,您仍然可以删除。
-
好的,很高兴知道,谢谢!
标签: r