我有一个如下所示的数据集:
B1,F1,D1,B0 B0 D1 F1 B1 B1,A1,E1 C#2 B1,G1,E1 B1,G1,E1 C#2,A1,E1 B1,G1,E1 B1 E2 B1,F1,D1 B1,D1,B0 B1,D1,B0 A1 F1 D1 G1,E1,B0 G1 G1 G1 E1 G1
B-1 A-1 G-1 G-1 F-1 E-1 B-1 B-1 B-1 E-1
我现在想要的是读取值然后替换特定值。
所以伪代码是:
#Read in data
#For line in data:
#Split words
#if word contains value from list (fe C,D)
#Replace it by X
所以,如果我的名单是
list_replace = c("B", "F")
我的预期输出是:
X1,F1,D1,X0 X0 D1 X1 X1 X1,A1,E1 C#2 X1,G1,E1 X1,G1,E1
C#2,A1,E1 X1,G1,E1 X1 E2 X1,X1,D1 B1,D1,B0 X1,D1,X0 A1 X1
D1 G1,E1,X0 G1 G1 G1 E1 G1
X-1 A-1 G-1 G-1 X-1 E-1 X-1 X-1 X-1 E-1
我创建了以下代码:
#Read in datea
data <-read.table("sample.txt", header = FALSE)
for i in 1:nrow(data){
words = strsplit(data[i]
for word 1:length(words){
#Replace values
}
}
但是现在我只得到了to_be_replaced列表的第一个值。关于如何替换所有内容的任何建议......最好立即在.txt文件中编辑它。
答案 0 :(得分:1)
我不确定您作为示例显示的数据结构,但这里应该有一个功能。
它将使用基础包中的gsub和正则表达式模式来查找感兴趣的字符,并允许使用给定值替换模式的所有匹配的变量输入。
fn <- function(find = NULL, replace = "X"){
raw_string <- readLines("sample.txt")
sub_pat <- sprintf("(%s)", paste0(find, collapse = "|"))
gsub(sub_pat, replace, raw_string)
}
因此对于模式(字母)B, E, G
fn(find = c("B", "E", "G"), replace = "XX")
[1] "XX1,F1,D1,XX0 XX0 D1 F1 XX1 XX1,A1,XX1 C#2 XX1,XX1,XX1 XX1,
XX1,XX1 C#2,A1,XX1 XX1,XX1,XX1 XX1 XX2 XX1,F1,D1
XX1,D1,XX0 XX1,D1,XX0 A1 F1 D1 XX1,XX1,XX0 XX1 XX1 XX1 XX1
XX1"
[2] "XX-1 A-1 XX-1 XX-1 F-1 XX-1 XX-1 XX-1 XX-1 XX-1"