Мне нужно преобразовать данные в многостолбцовый фрейм данных, и я хотел бы найти способ сделать преобразование во всех столбцах фрейма данных одновременно.Преобразование данных в числовые данные кажется беспроблемным.Например:
df <- data.frame(
co1 = c(5,9,6,1,6),
co2 = c(8,5,4,6,2),
co3 = c(6,5,4,1,2),
co4 = c(6,1,5,3,2),
co5 = c(5,1,2,6,8))
Я могу использовать цикл for для преобразования всех данных одновременно (например, пометить все значения> 5 как «да», все остальные как «нет»):
for(i in 1:ncol(df)){
df[i] <- ifelse(df[i] > 5, "yes", "no")
}
или, проще говоря, используйте индексы:
df[] <- ifelse(df > 5, "yes", "no")
Однако, когда у меня есть символьные данные, эти методы не работают.Например, я хочу преобразовать в «да» все значения, начинающиеся с «А» в этом фрейме данных:
df <- data.frame(
co1 = c(paste(sample(LETTERS[1:10],5), sample(LETTERS[1:10],5), sep = "")),
co2 = c(paste(sample(LETTERS[1:10],5), sample(LETTERS[1:10],5), sep = "")),
co3 = c(paste(sample(LETTERS[1:10],5), sample(LETTERS[1:10],5), sep = "")),
co4 = c(paste(sample(LETTERS[1:10],5), sample(LETTERS[1:10],5), sep = "")),
co5 = c(paste(sample(LETTERS[1:10],5), sample(LETTERS[1:10],5), sep = "")))
df
co1 co2 co3 co4 co5
1 JF GB ID EB DF
2 IA DD DA IF HD
3 HI IH JE CH FB
4 GE JI CJ BA GE
5 BG EE GG AJ BH
Цикл for
for(i in 1:ncol(df)){
df[i] <- ifelse(grepl("^B", df[i]), "yes", "no")
}
, а также преобразование черезиндексы приводят к тому же неверному преобразованию:
df[] <- ifelse(grepl("^B", df), "yes", "no")
df
co1 co2 co3 co4 co5
1 no no no no no
2 no no no no no
3 no no no no no
4 no no no no no
5 no no no no no
Любая помощь, как добиться правильных преобразований с символьными данными?