【问题标题】:Applying conditional functions to complex data.frame in R将条件函数应用于 R 中的复杂 data.frame
【发布时间】:2017-09-02 02:40:44
【问题描述】:

我有一个如下所示的数据框:

> 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。任何指导将不胜感激!谢谢:)

【问题讨论】:

    标签: r function dataframe conditional lapply


    【解决方案1】:

    这是您第一个问题的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))]
    

    对于您的第二个问题,只需将N == condition 替换为grepl(condition, N)

    mutate(df, Var = lapply(Var, mutate, N = ifelse(grepl("_", N), "B", N)))
    

    【讨论】:

      猜你喜欢
      • 2012-05-25
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      • 2015-01-18
      相关资源
      最近更新 更多