跨多个变量删除字符串的一部分

问题描述 投票:0回答:1

尝试通过一些调查数据来解决这个问题。回复采用多种语言,但始终以数字开头。示例:“1-同意”或“1-Acceurdo”。我试图仅隔离数字,以便删除数字通讯员之后的所有内容。

很简单,但我遇到的问题是如何在众多变量中做到这一点。幸运的是,所有感兴趣的变量都以“前”或“后”开头,所以我想看看是否有一种方法可以有效地循环所有这些变量来隔离数字?

此外,有些问题允许受访者选择多个值,因此不能只是“删除第一个字符后的所有内容”。一种解决方案可能是用逗号分隔数据?

定界代码:

df$Pre3<-(do.call("rbind", strsplit(as.character(df$Pre_3), ",", fixed = TRUE)))

Pre_3="1-Doctor, 2-Nurse, 6-Hospital"

会变成

Pre3[,1]="1-Doctor" : Pre3[,2] ="2-Nurse" : Pre3[,3]= "6-Hospital"

Screenshot of example data included.

r string loops
1个回答
0
投票

假设你想删除除数字之外的所有内容,你需要使用一些基本的正则表达式:

library(stringr)
MyString <- "1-This is something, 2-this is something else"
Numbers <- gsub("[^0-9]", "", MyString)
Delim <- paste(str_split_1(Test, ""), collapse = ",")

第一个表达式表示查找非数字的任何内容,第二个表达式表示将其替换为任何内容。除非某些文本答案包含数字字符,否则这应该有效。

第三行是为了防止您需要分隔数字并添加分隔符。

如果您需要转换数据框,有两个选项:

df <- data.frame(Pre_3 = rep(MyString, 5)) # Create data frame
df$Pre_3 <- gsub("[^0-9]", "", df$Pre_3) 

library(dplyr)

df2 <- mutate(df, across(1:1, ~gsub("[^0-9]", "", .)))

第一个适用于替换一个变量,或者您可以使用 dplyr across 多个变量。指定要转换的列,然后指定~函数和“.”告诉 gsub 当前变量/列是什么。

将 1:1 替换为您需要的列范围,或使用类似 c(1, 10:15, 20:22) 的内容。

© www.soinside.com 2019 - 2024. All rights reserved.