Найти и заменить значения в CSV-файле, используя текстовый файл - решения в R - PullRequest
1 голос
/ 03 мая 2020

У меня есть CSV-файл ss1.csv, который выглядит следующим образом:

enter image description here

dput(ss1)
structure(list(IDs = structure(1:10, .Label = c("1", "2", "3", 
"4", "5", "6", "7", "8", "9", "10"), class = "factor"), n1 = c("2", 
"1", "1", "1", "3", "2", "4", "5", "7", "6"), n2 = c("3", "4", 
"4", "2", "4", "4", "5", "7", "8", "7"), n3 = c("4", "6", "5", 
"3", "7", "7", "6", "9", "10", "9"), n4 = c(NA, NA, NA, "5", 
"8", "10", "8", NA, NA, NA), n5 = c(NA, NA, NA, "6", NA, NA, 
"9", NA, NA, NA), n6 = c(NA, NA, NA, "7", NA, NA, "10", NA, NA, 
NA)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"
))

Я хочу заменить все значения в столбцах n1 ... по значениям в текстовом файле. TXT-файл (Map.txt) выглядит следующим образом:

1 => 10
2 => 20
3 => 30
4 => 40
5 => 50
6 => 60
7 => 70
8 => 80
9 => 90
10 => 100

На данный момент я собираюсь это и работает:

sed `cat Map.txt | awk  '{print "-e s/"$1"/"$3"/"}'`<<< "`cat ss1.csv`" > results.csv

Но я хочу найти способ сделать это в Р. Надеюсь, кто-то может помочь! Спасибо

1 Ответ

1 голос
/ 03 мая 2020

Мы могли бы умножить на 10 после преобразования в целое число

library(dplyr)
ss1 <- ss1 %>% 
           mutate_at(vars(-IDs),  ~ as.integer(.) * 10)

Или, если мы хотим обобщить, использовать именованный вектор

nm1 <- setNames(seq(10, 100, by = 10), 1:10)
ss1 %>% 
         mutate_at(vars(-IDs), ~ nm1[.])

Если мы хотим использовать Map.txt

df1 <- read.table(text = paste(sub("\\s*=>\\s*", " ", 
         readLines('Map.txt')), collapse="\n"), header = FALSE)

nm1 <- setNames(df1$V2, df1$V1)

и используйте это в mutate_at


Или в base R

ss1[-1] <- as.integer(as.matrix(ss1[-1])) * 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...