dplyr::select 导致data.frame,如果结果是一列,有没有办法让它返回一个向量?
目前,我必须执行额外的step(res <- res$y)将其转换为data.frame中的vector,请参阅此示例:
#dummy data
df <- data.frame(x = 1:10, y = LETTERS[1:10], stringsAsFactors = FALSE)
#dplyr filter and select results in data.frame
res <- df %>% filter(x > 5) %>% select(y)
class(res)
#[1] "data.frame"
#desired result is a character vector
res <- res$y
class(res)
#[1] "character"
Run Code Online (Sandbox Code Playgroud)
如下:
res <- df %>% filter(x > 5) %>% select(y) %>% as.character
res
# This gives strange output
[1] "c(\"F\", \"G\", \"H\", \"I\", \"J\")"
# I need:
# [1] …Run Code Online (Sandbox Code Playgroud) 如果我加载MASS包:
library(MASS)
Run Code Online (Sandbox Code Playgroud)
然后加载尝试运行dplyr::select,我收到一个错误:
library(dplyr)
mtcars %.%
select(mpg)
# Error in select(`__prev`, mpg) : unused argument (mpg)
Run Code Online (Sandbox Code Playgroud)
如何使用加载dplyr::select的MASS包?
我对dplyr动词有点困惑mutate_each.
使用basic mutate将数据列转换为z-scores,并在data.frame中创建一个新列(此处带有名称z_score_data)非常简单:
newDF <- DF %>%
select(one_column) %>%
mutate(z_score_data = one_column - (mean(one_column) / sd(one_column))
Run Code Online (Sandbox Code Playgroud)
但是,由于我想要转换许多数据列,看起来我应该使用mutate_each动词.
newDF <- DF %>%
mutate_each(funs(scale))
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但到目前为止我还没弄清楚:
mutate?select在第一种情况下所做的那样?谢谢你的帮助.
我希望(1)通过一个变量()分组数据State,(2)在每个组内找到另一个变量(Employees)的最小值行,以及(3)提取整行.
(1)和(2)是简单的单行,我觉得(3)也应该是,但我不能得到它.
这是一个示例数据集:
> data
State Company Employees
1 AK A 82
2 AK B 104
3 AK C 37
4 AK D 24
5 RI E 19
6 RI F 118
7 RI G 88
8 RI H 42
data <- structure(list(State = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L), .Label = c("AK", "RI"), class = "factor"), Company = structure(1:8, .Label = c("A",
"B", "C", "D", "E", "F", "G", "H"), class = "factor"), Employees …Run Code Online (Sandbox Code Playgroud) 我有一个data.table:
set.seed(1)
data <- data.table(time = c(1:3, 1:4),
groups = c(rep(c("b", "a"), c(3, 4))),
value = rnorm(7))
data
# groups time value
# 1: b 1 -0.6264538
# 2: b 2 0.1836433
# 3: b 3 -0.8356286
# 4: a 1 1.5952808
# 5: a 2 0.3295078
# 6: a 3 -0.8204684
# 7: a 4 0.4874291
Run Code Online (Sandbox Code Playgroud)
我想在每个"组"级别内计算"值"列的滞后版本.
结果应该是这样的
# groups time value lag.value
# 1 a 1 1.5952808 NA
# 2 a 2 0.3295078 1.5952808 …Run Code Online (Sandbox Code Playgroud) 我试图用dplyr(data set = dat,variable = x)找出一种简单的方法来做这样的事情:
day$x[dat$x<0]=NA
Run Code Online (Sandbox Code Playgroud)
应该很简单,但这是我现在能做的最好的事情.有没有更简单的方法?
dat = dat %>% mutate(x=ifelse(x<0,NA,x))
Run Code Online (Sandbox Code Playgroud) 我尝试使用这里提供的代码用dplyr找到所有重复的元素,如下所示:
library(dplyr)
mtcars %>%
mutate(cyl.dup = cyl[duplicated(cyl) | duplicated(cyl, from.last = TRUE)])
Run Code Online (Sandbox Code Playgroud)
如何转换此处显示的代码以使用dplyr查找所有重复的元素?我上面的代码只是抛出一个错误?或者甚至更好,是否有另一种功能可以比复杂的x[duplicated(x) | duplicated(x, from.last = TRUE)])方法更简洁地实现这一目标?
我正在R中运行一个示例,完成这些步骤,到目前为止一切正常,除非此代码产生错误:
words <- dtm %>%
as.matrix %>%
colnames %>%
(function(x) x[nchar(x) < 20])
Run Code Online (Sandbox Code Playgroud)
错误:找不到函数"%>%"
我不明白使用这个特殊操作符的好处是什么
%>%,任何反馈都会很棒.
我试图从行计算中改变一个新变量,rowSums如下所示
iris %>%
mutate_(sumVar =
iris %>%
select(Sepal.Length:Petal.Width) %>%
rowSums)
Run Code Online (Sandbox Code Playgroud)
结果是"sumVar"被截断为其第一个值(10.2):
Source: local data frame [150 x 6]
Groups: <by row>
Sepal.Length Sepal.Width Petal.Length Petal.Width Species sumVar
1 5.1 3.5 1.4 0.2 setosa 10.2
2 4.9 3.0 1.4 0.2 setosa 10.2
3 4.7 3.2 1.3 0.2 setosa 10.2
4 4.6 3.1 1.5 0.2 setosa 10.2
5 5.0 3.6 1.4 0.2 setosa 10.2
6 5.4 3.9 1.7 0.4 setosa 10.2
..
Warning message:
Truncating vector to length 1
Run Code Online (Sandbox Code Playgroud)
它应该 …
是否可以从库中的使用函数列中选择所有唯一值?用符号表示" " .data.frameselectdplyrSELECT DISTINCT field1 FROM table1SQL
谢谢!