天道酬勤,学无止境

dplyr

dplyr 在列的子集上,同时保留 data.frame 的其余部分(dplyr on subset of columns while keeping the rest of the data.frame)

问题 我正在尝试使用 dplyr 将函数应用于列的子集。 但是,与下面的代码相反,我试图在将所有列保留在数据框中的同时实现这一点。 目前,生成的数据框仅保留选定的列。 我可以使用 remove-and-cbind 构造将这些列合并回原始数据帧,但我想知道是否有办法直接在 dplyr 中执行此操作? 我试图将 select 函数移到 mutate 函数中,但还没有完成这项工作。 require(dplyr) Replace15=function(x){ifelse(x<1.5,1,x)} dg <- iris %>% dplyr::select(starts_with("Petal")) %>% mutate_each(funs(Replace15)) dg > dg Source: local data frame [150 x 2] Petal.Length Petal.Width 1 1.0 1 2 1.0 1 3 1.0 1 4 1.5 1 5 1.0 1 6 1.7 1 7 1.0 1 8 1.5 1 9 1.0 1 10 1.5 1 回答1 dg <- iris %>% mutate_each(funs(Replace15), matches("^Petal")) 或者(由@aosmith 发布)您可以使用starts_with 。 看一看

2021-09-21 19:14:36    分类:技术分享    r   dplyr

序列数据上带有 dplyr 的简单表(Simple Table with dplyr on Sequence Data)

问题 我想做一个简单的表格 dplyr 和 summarise 但我真的不知道如何......(即使它应该很简单)。 我有一个序列矩阵。 当我简单地制表时 table(dta) 我有我想要的结果。 dta acquaintance alone child notnotnot nuclear 1 2 17 19 131 nuclear and acquaintance nuclear and acquaintance nuclear and acquaintance nuclear and acquaintance partner 1 1 1 35 2 但是,我不知道如何用总结来做同样的事情 有什么建议吗? dta = structure(c("nuclear", "nuclear", "child", "child", "child", "acquaintance", "nuclear and acquaintance", "nuclear and acquaintance", "notnotnot", "nuclear", "nuclear", "nuclear", "child", "child", "child", "alone", "nuclear and acquaintance", "nuclear and acquaintance", "notnotnot",

2021-09-21 16:34:38    分类:技术分享    r   count   dplyr   summary

如何将 dplyr::tbl 连接编码更改为 utf8?(How to change dplyr::tbl connection encoding to utf8?)

问题 在 MySQL 数据库中,表以 utf8 编码,但由于某种原因连接在 latin1 中。 res <- RMySQL::dbSendQuery(con,"show variables like 'character_set_%'") dbFetch(res) Variable_name Value 1 character_set_client latin1 2 character_set_connection latin1 3 character_set_database utf8mb4 4 character_set_filesystem binary 5 character_set_results latin1 6 character_set_server latin1 7 character_set_system utf8 8 character_sets_dir /usr/share/mysql/charsets/ 本页解释了如何使用 RMySQL 将连接的字符集设置为 utf8。 RMySQL::dbGetQuery(con,"show variables like 'character_set_%'") RMySQL::dbGetQuery(con,"set names utf8") 但我实际上更喜欢使用dplyr::tbl来查询数据库。 由于dplyr::src

2021-09-21 16:17:32    分类:技术分享    r   dplyr   rmysql

dplyr group_by 出错(Error with dplyr group_by)

问题 这是我的数据集 N Pl 10, WO 20, EI 10, WO 20, WO 30, EI 我的预期输出是 N Pl 10, 2 20, 1 30, 1 所以,基本上,我正在计算每个值在 N 处的 pl 数 我正在尝试 dplyr。 我知道这可能也可以用 aggregate() 来完成,但我不知道该怎么做。 所以在 dplyr 我运行这个语句并得到以下错误 陈述: Diff %>% group_by(N) %>% summarise(pl=count(pl)) 这里Diff是我的表名 Error in UseMethod("group_by_") : no applicable method for 'group_by_' applied to an object of class "c('integer', 'numeric')" 我不知道该怎么做。 任何帮助将不胜感激。 我也只有 R 的基本知识 回答1 也许您想要的输出是错误的,请尝试: library(dplyr) df<-data.frame(N=c(10,20,10,20,30), Pl=c("WO","EI","WO","WO","EI")) group <- group_by(df, N) result <- as.data.frame(summarise(group, Pl = n_distinct(Pl

2021-09-21 15:23:08    分类:技术分享    r   aggregate   dplyr

如何在dplyr中每n行非随机采样?(How to non-randomly sample every n rows in dplyr?)

问题 我想在 dplyr 中做sample_n() ,除了我不希望采样是随机的,我打算每 n 行采样一次。 有没有办法做到这一点? 例如,我想在按Month和Day排序后获取airquality数据集的每 10 行。 预期输出: Ozone Solar.R Wind Temp Month Day NA 194 8.6 69 5 10 11 44 9.7 62 5 20 115 223 5.7 79 5 30 71 291 13.8 90 6 9 12 120 11.5 73 6 19 NA 31 14.9 77 6 29 ... 回答1 您真的希望使用序列进行子集化。 mtcars[seq(1, nrow(mtcars), 10), ] 用您的 data.frame 替换两个mtcars出现,并将10替换为您要提取的第 n 行 回答2 如果您有想要采样的有序数据的数据框,您可以过滤row_number : library(tidyverse) airquality %>% arrange(Month, Day) %>% filter(row_number() %% 10 == 0) %>% head() #> Ozone Solar.R Wind Temp Month Day #> 1 NA 194 8.6 69 5 10 #> 2 11 44 9.7 62 5 20 #> 3

2021-09-21 15:02:18    分类:技术分享    r   dplyr   subsampling

使用 group_by 过滤特定案例,同时保留 NA(Use group_by to filter specific cases while keeping NAs)

问题 我想过滤我的数据集以在特定列中保留带有观察的案例。 为了显示: help <- data.frame(deid = c(5, 5, 5, 5, 5, 12, 12, 12, 12, 17, 17, 17), score.a = c(NA, 1, 1, 1, NA, NA, NA, NA, NA, NA, 1, NA)) 创造 deid score.a 1 5 NA 2 5 1 3 5 1 4 5 1 5 5 NA 6 12 NA 7 12 NA 8 12 NA 9 12 NA 10 17 NA 11 17 1 12 17 NA 我想告诉 dplyr 保留在score.a中有任何观察的score.a ,包括 NA 值。 因此,我希望它返回: deid score.a 1 5 NA 2 5 1 3 5 1 4 5 1 5 5 NA 6 17 NA 7 17 1 8 17 NA 我运行了代码help %>% group_by(deid) %>% filter(score.a > 0)但是它也拉出了 NA。 感谢您提供任何帮助。 编辑:这里问了一个类似的问题如何使用 dplyr::filter() 删除观察组但是,在答案中,他们使用“全部”条件,这需要使用“任何”条件。 回答1 尝试 library(dplyr) help %>% group_by(deid) %>% filter

2021-09-21 13:35:50    分类:技术分享    r   dplyr

如何汇总加权数据(How to summarise weighted data)

问题 是否有可能在dplyr使用权重: summarise 功能? 让我们想象一下我想计算一个加权表 dta = structure(list(PHHWT14 = c(530, 457, 416, 497, 395, 480, 383, 420, 499, 424, 504, 497, 449, 406, 492, 470, 418, 407, 403, 362, 393, 368, 423, 448, 511, 511, 423, 470, 453, 429, 439, 425, 431, 443, 480, 452, 472, 406, 460, 436, 574, 456, 399, 476, 423, 501, 399, 459, 396, 409, 423, 399, 383, 433, 436, 413, 403, 414, 410, 337, 472, 448, 487, 442, 475, 410, 478, 483, 374, 414, 514, 422, 409, 455, 464, 362, 461, 356, 464, 456, 494, 348, 464, 432, 398, 426, 418, 429, 516, 363, 455, 413, 388, 508, 381, 439, 330, 385, 393, 454), SEX = structure

2021-09-21 13:17:15    分类:技术分享    r   dplyr   summary

如何使用带有“无效”名称(即包含空格)的 dplyr SE?(How to use dplyr SE with “invalid” names (ie containing spaces)?)

问题 我不知道如何使用带有无效变量名的 SE dplyr 函数,例如选择一个带有空格的变量。 例子: df <- dplyr::data_frame(`a b` = 1) myvar <- "a b" 如果我想选择ab变量,我可以用dplyr::select(df, `ab`)来做,但是我怎么用select_呢? 我想我只需要找到一个用反引号“包装”字符串的函数,这样我就可以调用dplyr::select_(df, backtick(myvar)) 回答1 正如 MyFlick 在评论中所说,这种行为通常应该避免,但如果你想让它工作,你可以制作自己的反引号包装器 backtick <- function(x) paste0("`", x, "`") dplyr::select_(df, backtick(myvar)) 编辑:Hadley 回复了我关于这个的推文,并向我展示了简单地使用as.name可以解决这个问题,而不是使用反引号: df <- dplyr::data_frame(`a b` = 1) myvar <- "a b" dplyr::select_(df, as.name(myvar)) 回答2 我的解决方案是利用select使用列位置的能力。 as.name解决方案似乎不适用于我的某些专栏。 select(df, which(names(df) %in% myvar

2021-09-21 12:48:27    分类:技术分享    r   dplyr

选择第一个观察到的数据并利用 mutate(Select first observed data and utilize mutate)

问题 我正在与我的数据,我想利用第一个观测到的一个问题ob得分score为每个单独的id和减去从去年观察到的score 。 要求第一个观察减去最后一个观察的问题是有时第一个观察数据丢失。 无论如何要为每个人要求第一个观察到的分数,从而跳过任何缺失的数据? 我构建了下面的 df 来说明我的问题。 help <- data.frame(id = c(5,5,5,5,5,12,12,12,17,17,20,20,20), ob = c(1,2,3,4,5,1,2,3,1,2,1,2,3), score = c(NA, 2, 3, 4, 3, 7, 3, 4, 3, 4, NA, 1, 4)) id ob score 1 5 1 NA 2 5 2 2 3 5 3 3 4 5 4 4 5 5 5 3 6 12 1 7 7 12 2 3 8 12 3 4 9 17 1 3 10 17 2 4 11 20 1 NA 12 20 2 1 13 20 3 4 我希望运行的是能给我带来... id ob score es 1 5 1 NA -1 2 5 2 2 -1 3 5 3 3 -1 4 5 4 4 -1 5 5 5 3 -1 6 12 1 7 3 7 12 2 3 3 8 12 3 4 3 9 17 1 3 -1 10 17 2 4 -1 11 20 1 NA -3 12 20 2 1 -3

2021-09-21 12:44:20    分类:技术分享    r   dplyr

在 dplyr tbl_df 中获取删除列的最佳实践(Best practice to get a dropped column in dplyr tbl_df)

问题 我记得 2001 年对 r-help 的评论说[.data.frame中的drop = TRUE是 R 历史上最糟糕的设计决策。 dplyr纠正了这一点,并且不会隐式删除。 当尝试将旧代码转换为dplyr样式时,当d[, 1]或d[1]被假定为向量时,这会引入一些令人讨厌的错误。 我当前的解决方法使用如下所示的unlist来获取 1 列向量。 有什么更好的想法吗? library(dplyr) d2 = data.frame(x = 1:5, y = (1:5) ^ 2) str(d2[,1]) # implicit drop = TRUE # int [1:5] 1 2 3 4 5 str(d2[,1, drop = FALSE]) # data.frame': 5 obs. of 1 variable: # $ x: int 1 2 3 4 5 # With dplyr functions d1 = data_frame(x = 1:5, y = x ^ 2) str(d1[,1]) # Classes ‘tbl_df’ and 'data.frame': 5 obs. of 1 variable: # $ x: int 1 2 3 4 5 str(unlist(d1[,1])) # This ugly construct gives the same as str(d2

2021-09-21 12:36:52    分类:技术分享    r   dataframe   dplyr