小编Tim*_* S.的帖子

dplyr - mutate:使用动态变量名

我想使用dplyr dplyr::mutate()在数据框中创建多个新列.应动态生成列名称及其内容.

来自虹膜的示例数据:

library(dplyr)
iris <- tbl_df(iris)
Run Code Online (Sandbox Code Playgroud)

我已经创建了一个函数来改变Petal.Width变量中的新列:

multipetal <- function(df, n) {
    varname <- paste("petal", n , sep=".")
    df <- mutate(df, varname = Petal.Width * n)  ## problem arises here
    df
}
Run Code Online (Sandbox Code Playgroud)

现在我创建一个循环来构建我的列:

for(i in 2:5) {
    iris <- multipetal(df=iris, n=i)
}
Run Code Online (Sandbox Code Playgroud)

但是,由于mutate认为varname是一个文字变量名,因此循环只创建一个新变量(称为varname)而不是四个(称为petal.2 - petal.5).

如何将mutate()动态名称用作变量名?

r r-faq dplyr

131
推荐指数
6
解决办法
9万
查看次数

根据字符串匹配选择列 - dplyr :: select

我有一个包含大量列的数据框("数据").某些列包含某个字符串("search_string").

我如何使用dplyr::select()给我一个子集,只包含包含字符串的列?

我试过了:

# columns as boolean vector
select(data, grepl("search_string",colnames(data)))

# columns as vector of column names names 
select(data, colnames(data)[grepl("search_string",colnames(data))]) 
Run Code Online (Sandbox Code Playgroud)

它们都不起作用.

我知道select()接受数字向量作为列的替代,例如:

select(data,5,7,9:20)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何ID从我的grepl()表达式中获取列的数字向量.

regex grep r dplyr

70
推荐指数
4
解决办法
7万
查看次数

将PCA预处理参数传递给train()

我正在尝试使用PCA作为预处理在插入符号中构建预测模型.预处理如下:

preProc <- preProcess(IL_train[,-1], method="pca", thresh = 0.8)
Run Code Online (Sandbox Code Playgroud)

是否有可能将thresh参数直接传递给插入符号的train()函数?我尝试了以下,但它不起作用:

modelFit_pp <- train(IL_train$diagnosis ~ . , preProcess="pca",
                            thresh= 0.8, method="glm", data=IL_train)
Run Code Online (Sandbox Code Playgroud)

如果没有,我如何将单独的preProc结果传递给train()函数?

r machine-learning pca r-caret

15
推荐指数
1
解决办法
4990
查看次数

R - 绘制重叠时间间隔

我有一份人员名单以及他们一天的工作开始和结束时间.我想绘制一条曲线,显示当天任何一分钟工作的人员总数.我能做的就是为一天中的每一分钟添加1440个额外的条件布尔变量并总结它们,但这看起来非常不优雅.我想知道是否有更好的方法(积分?).

这是使用我的示例数据生成df的代码:

sample_wt <- function() {

    require(lubridate)

    set.seed(10)

    worktime <- data.frame(
            ID = c(1:100),
            start = now()+abs(rnorm(100,4800,2400))
            )

    worktime$end <- worktime$start + abs(rnorm(100,20000,10000))

    worktime$length <- difftime(worktime$end, worktime$start, units="mins")

    worktime
}
Run Code Online (Sandbox Code Playgroud)

要创建示例数据,您可以执行以下操作:

DF <- sample_wt() 
Run Code Online (Sandbox Code Playgroud)

plot datetime r

8
推荐指数
1
解决办法
1088
查看次数

r - 来自子/父关系的分层数据帧

我有一个子 - 父数据.我想要转换为一个包含所有级别和级别编号的完整分层列表.下面的示例数据分为三个级别,但可能更多.我可以使用什么功能来转换数据?

资源:

data.frame(name = c("land", "water", "air", "car", "bicycle", "boat", "balloon",
  "airplane", "helicopter", "Ford", "BMW", "Airbus"), parent = c(NA, NA, NA, 
  "land", "land", "water", "air", "air", "air", "car", "car", "airplane"))

         name   parent
1        land     <NA>
2       water     <NA>
3         air     <NA>
4         car     land
5     bicycle     land
6        boat    water
7     balloon      air
8    airplane      air
9  helicopter      air
10       Ford      car
11        BMW      car
12     Airbus airplane
Run Code Online (Sandbox Code Playgroud)

目的地:

data.frame(level1 = c("land", "water", "air", "land", "land", "water", "air", …
Run Code Online (Sandbox Code Playgroud)

r hierarchy hierarchical-data

7
推荐指数
2
解决办法
2795
查看次数

循环遍历数据框和变量名称

我正在寻找一种方法来使用FOR循环自动化R中的一些图表:

dflist <- c("dataframe1", "dataframe2", "dataframe3", "dataframe4")

for (i in dflist) {
  plot(i$var1, i$var2)
}
Run Code Online (Sandbox Code Playgroud)

所有数据帧都具有相同的变量,即var1,var2.

似乎for循环不是这里最优雅的解决方案,但我不明白如何使用apply图表的功能.

编辑:

我的原始示例使用mean()在原始问题中没有帮助,所以我将其更改为绘图功能.

variables loops r dataframe

6
推荐指数
2
解决办法
8万
查看次数

R - 老鼠 - 机器学习:重新使用从火车到测试集的插补方案

我正在构建一个预测模型,并且正在使用该mice程序包来训练我的训练集中的NA.由于我需要为我的测试集重复使用相同的插补方案,如何将其重新应用于我的测试数据?

# generate example data
set.seed(333)
mydata <- data.frame(a = as.logical(rbinom(100, 1, 0.5)),
                     b = as.logical(rbinom(100, 1, 0.2)),
                     c = as.logical(rbinom(100, 1, 0.8)),
                     y = as.logical(rbinom(100, 1, 0.6)))

na_a <- as.logical(rbinom(100, 1, 0.3))
na_b <- as.logical(rbinom(100, 1, 0.3))
na_c <- as.logical(rbinom(100, 1, 0.3))
mydata$a[na_a] <- NA
mydata$b[na_b] <- NA
mydata$c[na_c] <- NA

# create train/test sets
library(caret)
inTrain <- createDataPartition(mydata$y, p = .8, list = FALSE)
train <- mydata[ inTrain, ] 
test <-  mydata[-inTrain, ]

# impute NAs …
Run Code Online (Sandbox Code Playgroud)

r machine-learning r-mice r-caret

6
推荐指数
1
解决办法
982
查看次数

在 dplyr 的过滤器中同时使用空过滤器和字符串过滤器

我正在使用不推荐dplyr::filter_()使用的dplyr::filter(). 但我不能让它再用于空过滤器字符串:

例子:

library(dplyr)
my_df <- tibble::tibble(x = sample(c(0:9), 100, replace = TRUE))
Run Code Online (Sandbox Code Playgroud)

不推荐使用filter_()字符串和空字符串

fil1 <- "x == 5"
filter_(mydf, .dots = fil1) # works

fil2 <- NULL
filter_(mydf, .dots = fil2) # works, returns all values
Run Code Online (Sandbox Code Playgroud)

NSE 版本仅适用于带引号的过滤器值,但不适用于空值

fil1 = quo(x == 5)
filter(my_df, !!enquo(fil1)) # works

fil2 = NULL
filter(my_df, !!enquo(fil2)) 
Error: Argument 2 filter condition does not evaluate to a logical vector

fil2 = quo(NULL)
filter(my_df, !!enquo(fil2))
Error: Argument 2 filter …
Run Code Online (Sandbox Code Playgroud)

r dplyr nse

6
推荐指数
1
解决办法
218
查看次数

使用dplyr在行之间进行difftime

我正在尝试使用dplyr包计算两个相邻行中两个时间戳之间的时间差.这是代码:

    tidy_ex <- function () {

    library(dplyr)

    #construct example data
    data <- data.frame(code = c(10888, 10888, 10888, 10888, 10888, 10888, 
                                    10889, 10889, 10889, 10889, 10889, 10889,
                                    10890, 10890, 10890),
                           station = c("F1", "F3", "F4", "F5", "L5", "L7", "F1",
                                       "F3", "F4", "L5", "L6", "L7", "F1", "F3", "F5"),
                           timestamp = c(1365895151, 1365969188, 1366105495,
                                           1367433149, 1368005216, 1368011698,
                                           1366244224, 1366414926, 1367513240,
                                           1367790556, 1367946420, 1367923973,
                                           1365896546, 1365907968, 1366144207))

    # reformat timestamp as POSIXct
    data$timestamp <- as.POSIXct(data$timestamp,origin = "1970-01-01")

    #create tbl_df
    data2 <- tbl_df(data)

    #group by …
Run Code Online (Sandbox Code Playgroud)

r plyr dplyr

4
推荐指数
1
解决办法
5881
查看次数

R - 将向量传递给自定义函数到dplyr :: mutate

我有以下功能,允许我从其URL中删除维基百科内容(确切内容与此问题无关)

getPageContent <- function(url) {

        library(rvest)
        library(magrittr)

        pc <- html(url) %>% 
                html_node("#mw-content-text") %>% 
                # strip tags
                html_text() %>%
                # concatenate vector of texts into one string
                paste(collapse = "")

        pc
}
Run Code Online (Sandbox Code Playgroud)

在特定URL上使用该功能时,这是有效的.

getPageContent("https://en.wikipedia.org/wiki/Balance_(game_design)")

[1] "In game design, balance is the concept and the practice of tuning a game's rules, usually with the goal of preventing any of its component systems from being ineffective or otherwise undesirable when compared to their peers. An unbalanced system represents wasted development resources at the …
Run Code Online (Sandbox Code Playgroud)

r dplyr

3
推荐指数
1
解决办法
2856
查看次数

R / lubridate:计算两个时期之间重叠的天数

我正在尝试计算两个时间段之间重叠的天数。一个周期固定在开始和结束日期,另一个在数据框中记录为开始和结束日期。

编辑:我正在处理具有发布日期 (df$start) 和取消发布日期 (df$end) 的广告。我试图找出他们在特定月份(my.start = 2018-01-01,my.end = 2018-08-31)在线的天数。

library(dplyr)
library(lubridate)

my.start <- ymd("2018-08-01")
my.end <- ymd("2018-08-31")

df <- data.frame(start = c("2018-07-15", "2018-07-20", "2018-08-15", "2018-08-20", "2018-09-01"), 
                 end   = c("2018-07-20", "2018-08-05", "2018-08-19", "2018-09-15", "2018-09-15"))

# strings to dates
df <- mutate(df, start = ymd(start), end = ymd(end))

# does not work - calculate overlap in days
df <- mutate(df, overlap = intersect(interval(my.start, my.end), interval(start, end)))
Run Code Online (Sandbox Code Playgroud)

结果应该是 0、5、4、12、0 天:

   my.start |-------------------------------| my.end

|-----| (0)
        |---------| (5)
                            |----| (4)
                                   |------------------| (12)
                                             |---------------| …
Run Code Online (Sandbox Code Playgroud)

r date overlap lubridate

1
推荐指数
1
解决办法
1233
查看次数

R:两个日期之间的特定工作日数

我有两个日期,需要知道他们之间有多少星期一,星期二,星期三等,使用R.这是一种伪代码方法:

#PSEUDOCODE    
countwd <- function(startdate, enddate, weekday)
Run Code Online (Sandbox Code Playgroud)

>countwd("2014-01-01", "2014-03-30", "Monday")

[1] 13
Run Code Online (Sandbox Code Playgroud)

是否有现有的包/功能?如果没有,该如何设置此功能?

r date weekday

0
推荐指数
1
解决办法
869
查看次数