我已经看到很多关于如何使用gsub或grep函数提取数值变量中的第一个数字或最后一个数字的帖子,但是我希望能够提取一个特定的数字,无论它是第一个,中间,还是最后一个更大的数值变量. 例如,我试图让R扫描,如果某列的某一行有数字3,如果是,则创建一个新变量,其中1 = yes,0 = no.

假设我有这个框架:

have <- as.data.frame(structure(list(Q14=structure(c(13, 3, 788, 134, 56,  3214, 1036 )))))

这是我想要生成的第二列,其中变量Q14_3的1意味着变量Q14在某个地方有一个3,而0意味着在Q14的特定行中没有数字3.

want <- as.data.frame(structure(list(Q14=structure(c(13, 3, 788, 134, 56,  3214, 1036 )),
                                      Q14_3=structure(c(1, 1, 0, 1, 0, 1, 1)))))

谢谢你!

推荐答案

在基数R中,使用grepl生成布尔向量,使用+将其转换为1/0变量:

have$Q14_3 <- +grepl(3, have$Q14)

#    Q14 Q14_3
# 1   13     1
# 2    3     1
# 3  788     0
# 4  134     1
# 5   56     0
# 6 3214     1
# 7 1036     1

或者,由于它被标记,使用dplyr::mutatestringr::str_detecttidyverse方法:

library(dplyr)
library(stringr)

have %>%
  mutate(Q14_3 = +str_detect(Q14, "3"))

测试:

all.equal(have, want)
# TRUE

R相关问答推荐

工作流程_set带有Dplyrr风格的 Select 器,用于 Select 结果和预测因子R

行式dppr中的变量列名

如何在RMarkdown LaTex PDF输出中包含英语和阿拉伯语?

根据模式将一列拆分为多列,并在R中进行拆分

在for循环中转换rabrame

标识R中多个列中缺少的唯一值

多个过滤器内的一个盒子在仪表板Quarto

在R中按行按列范围查找最大值的名称

R-按最接近午夜的时间进行筛选

列名具有特殊字符时的循环回归

按组内中位数分类

如何在R中使用混合GAM模型只对固定的影响因素进行适当的预测?

SHILINY中DT列的条件着色

自定义交互作用图的标签

通过R:文件名未正确写入[已解决]将.nc文件转换和导出为.tif文件

构建一个6/49彩票模拟系统

隐藏基于 case 总数的值

如何修改GT表中组名行的 colored颜色 ?

希望解析和复制R中特定模式的数据

在R中添加要打印的垂直线