2017-04-06 12 views
0

に複雑なdata.frameに条件付きの関数を適用する:私はこのようになり、データフレームのデータフレーム持っているR

> df 
           Var 
1   word_1, word_2, word_3 
2 word_1, word_2, word_3, word_4 

> dput(df) 
structure(list(df = list(structure(list(N = c("word_1", "word_2", "word_3")), 
.Names = "N", row.names = c(NA, -3L), class = "data.frame"), structure(list(N 
= c("word_1", "word_2", "word_3", "word_4")), 
.Names = "N", row.names = c(NA, -4L), class = "data.frame"))), .Names = "Var", 
row.names = c(NA, -2L), class = "data.frame") 

を、私は、このような言葉が条件と一致した場合、そのデータに関数を適用したいですそれが置き換えられます。私はこのような何かしようとしている:

func_1 <- function(dataset, condition){ 
require(data.table) 
setDT(dataset)[, lapply(.SD, function(x) ifelse(x == condition, "A", x))] 
} 

df <- lapply(df, func_1, condition = "word_2") 

をしかし、私はエラーを取得する:

Error in matrix(unlist(value, recursive = FALSE, use.names = FALSE), nrow = 
nr, : 
'df' must be of a vector type, was 'NULL' 

状態が発生した場所、私は言葉を交換できるようにしたいことを除いて、私もfunc_1のような多くの機能を必要としますsomewhereたとえば、func_2は、"_"を含む単語がある文字、たとえばBに置き換えられるようなものになります。どんな指導も大歓迎です!感謝:)ここ

答えて

0

はあなたの最初の問題にdplyrソリューションです。

condition <- "word_2" 
library(dplyr) 
mutate(df, Var = lapply(Var, mutate, N = ifelse(N == condition, "A", N))) 
#       Var 
# 1   word_1, A, word_3 
# 2 word_1, A, word_3, word_4 

ベースRでの翻訳:

"$<-"(df, Var, lapply(df$Var, function(x) 
    "$<-"(x, N, ifelse(x$N == condition, "A", x$N)) 
)) 

あなたがdata.tableを使用するように見えるので、私はいくつかのdata.tableを彫ることを試みました私は文法にあまり慣れていないので、あまり慣用的ではないかもしれません:

library(data.table) 
DT <- as.data.table(df) 
DT[, .(Var = list(as.data.table(Var)[, ifelse(N == condition, "A", N)])), by = seq_len(nrow(DT))] 
もし第二の問題については

、それはgrepl(condition, N)N == conditionの簡単な交換です:

mutate(df, Var = lapply(Var, mutate, N = ifelse(grepl("_", N), "B", N))) 
関連する問題