Заменить несколько символов из столбца в CSV-файле в R - PullRequest
0 голосов
/ 02 апреля 2019

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

> collar<-read.csv("41361_predicted_by_41365_cluster.csv",header=TRUE,stringsAsFactors = F)
> head(collar)
        observed      predicted probability
1 Moving/Feeding       Standing           1
2       Standing Feeding/Moving           1
3       Standing Feeding/Moving           1
4       Standing Feeding/Moving           1
5       Standing Feeding/Moving           1
6       Standing Feeding/Moving           1

Мой вопрос прост, но немного сложен для реализации, так как я изучаю R. Мне просто нужно сделать следующие замены символов в столбцеpredicted:

1) заменить Feeding/Moving на Standing

2) заменить Moving/Feeding на Feeding/Moving

3) заменить Standing на Moving/Feeding

Затем я хотел бы записать данные в формате CSV, используя имя "corrected_41361_predicted_by_41365_cluster".

Я ищу наиболее компактный способ сделать это.Есть ли другой способ, чем gsub()?Любой вклад приветствуется!

Ответы [ 2 ]

2 голосов
/ 02 апреля 2019

Как это? (Я немного изменил ваш образец, чтобы включить «Перемещение / Кормление»)

library(dplyr)

df %>%
  mutate(predicted = case_when(predicted == 'Feeding/Moving' ~ 'Standing',
                               predicted == 'Moving/Feeding' ~ 'Feeding/Moving',
                               predicted == 'Standing' ~ 'Moving/Feeding',
                               TRUE ~ predicted)) %>%
 write.csv(file = "corrected_41361_predicted_by_41365_cluster.csv")

Файл содержит результат:


        observed      predicted probability
1 Moving/Feeding Moving/Feeding           1
2       Standing       Standing           1
3       Standing       Standing           1
4       Standing       Standing           1
5       Standing Feeding/Moving           1
6       Standing       Standing           1

1 голос
/ 02 апреля 2019

Вы можете попробовать что-то вроде этого:

# Read all files in folder
mydocpath = "C:/Users/yourdata"
files <- list.files(path=sprintf("%s",mydocpath), pattern="*.csv", full.names=TRUE, recursive=FALSE)
print(files)

# Read to "list of DFs"
myf = lapply(files, function(x) data.frame(read.csv(x, sep=";", header=F, na = "na", skip=1)))
# Access single DF in list
myf[[1]]

# Do something to each DF
for(i in myf){
  print(head(myf))
}
...