小编Jak*_*her的帖子

为什么dplyr的过滤器会从因子变量中删除NA值?

当我filterdplyr包中使用以删除因子变量的级别时,filter也会删除NA值.这是一个例子:

library(dplyr)
set.seed(919)
(dat <- data.frame(var1 = factor(sample(c(1:3, NA), size = 10, replace = T))))
#    var1
# 1  <NA>
# 2     3
# 3     3
# 4     1
# 5     1
# 6  <NA>
# 7     2
# 8     2
# 9  <NA>
# 10    1

filter(dat, var1 != 1)
#   var1
# 1    3
# 2    3
# 3    2
# 4    2
Run Code Online (Sandbox Code Playgroud)

这似乎并不理想 - 我只想把行放在哪里var1 == 1. …

r subset na dplyr

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

如何在ggplot2中为离散变量创建渐变颜色?

我有大约100个有序类别的数据.我想将每个类别分别绘制为一条线,线条颜色范围从低值(比如蓝色)到高值(比如红色).

这是一些示例数据和一个图.

# Example data: normal CDFs

library(ggplot2)

category <- 1:100
X <- seq(0, 1, by = .1)
df <- data.frame(expand.grid(category, X))
names(df) <- c("category", "X")
df <- within(df, {
  Y <- pnorm(X, mean = category / 100)
  category <- factor(category)
  })

# Plot with ggplot
qplot(data = df, x = X, y = Y, color = category, geom = "line")
Run Code Online (Sandbox Code Playgroud)

这会产生漂亮的彩虹(下图)在此输入图像描述

但我宁愿从蓝色到红色渐变.我有什么想法可以做到这一点?

r ggplot2

14
推荐指数
2
解决办法
1万
查看次数

如何使用dplyr为多个变量名添加前缀?

我正在尝试为data.frame中的每个变量名添加一个公共前缀.例如,使用mtcars数据,我可以添加前缀"cars".使用以下代码:

> data(mtcars)
> names(mtcars)
 [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"  
 [9] "am"   "gear" "carb"
> names(mtcars) <- paste0("cars.", names(mtcars))
> names(mtcars)
 [1] "cars.mpg"  "cars.cyl"  "cars.disp" "cars.hp"  
 [5] "cars.drat" "cars.wt"   "cars.qsec" "cars.vs"  
 [9] "cars.am"   "cars.gear" "cars.carb"
Run Code Online (Sandbox Code Playgroud)

但是,我想%>%使用一些dplyr语法将其作为管道操作的一部分(即,使用串联的一系列函数).这似乎是一些组合renameeverything()应该做的伎俩,但我不知道如何让它工作.有没有人有任何想法?

r dplyr

12
推荐指数
5
解决办法
8442
查看次数

如何使用tidyr填充分组变量的每个值中的已完成行?

假设我有关于在多个选项之间进行选择的人的数据.我每人有一排,我希望每人有一排和选择.所以,如果我有10个人有3个选择,现在我有10行,我想有30个.

应将所有其他变量复制到每个新行.因此,例如,如果我有一个性别变量,那么它应该在ID内保持不变.(我正在以这种方式设置我的数据以进行分析mnlogit.)

这似乎是两个tidyr功能的情况,complete并且fill是为此而设计的.使用一个简单的例子:

library(lubridate)
library(tidyr)
dat <- data.frame(
    id = 1:3,
    choice = 5:7,
    c = c(9, NA, 11),
    d = ymd(NA, "2015-09-30", "2015-09-29")
    )

dat %>% 
  complete(id, choice) %>%
  fill(everything())

# Source: local data frame [9 x 4]
# 
#      id choice     c          d
#   (int)  (int) (dbl)     (time)
# 1     1      5     9       <NA>
# 2     1      6     9       <NA>
# 3     1      7     9       <NA>
# 4     2      5 …
Run Code Online (Sandbox Code Playgroud)

r tidyr

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

为什么geom_density和stat_density(geom ="line")给出不同的结果?

在下图中,为什么geom_densitystat_density(geom = "line")给出不同的结果?

library(ggplot2)

df <- data.frame(
  x.values = c(
    rnorm(100, mean = 1, sd = 1),
    rnorm(100, mean = 4, sd = 1),
    rnorm(100, mean = 7, sd = 1),
    rnorm(100, mean = 10, sd = 1)
  ),
  mean.values = sort(rep(c(1, 4, 7, 10), 100))
)

p <- ggplot(df, aes(x = x.values, color = mean.values, group = mean.values))

p + geom_density()
Run Code Online (Sandbox Code Playgroud)

geom_density结果

p + stat_density(geom = "line")
Run Code Online (Sandbox Code Playgroud)

stat_density结果

r ggplot2

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

为什么 mutate(row_number()) 对于 data.tables 会失败?

当我尝试在 data.table 上使用row_number()fromdplyr时,它会引发错误。下面是一个例子:

library(dplyr)
library(data.table)
mine <- data.table(a = 1:10)
mine %>% mutate(row_number())
# Error in rank(x, ties.method = "first", na.last = "keep") : 
#   argument "x" is missing, with no default
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会发生这种情况?

r dplyr data.table

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

如何计算列表中唯一向量的数量?

说我有一个向量列表.我想要列出该列表中的唯一向量及其频率.我可以得到一个唯一值的列表unique,但我无法弄清楚如何获得计数的向量.

my.list <- list(c(1, 1, 0), c(1, 1, 0))
> unique(my.list)  # gives correct answer
# [[1]]
# [1] 1 1 0
Run Code Online (Sandbox Code Playgroud)

现在我想要的东西给了我一个unique(my.list)重复每个元素的次数的向量.在这种情况下,它应该是带元素的向量2.

使用table不起作用,因为它分别取向量的每个元素(0和1值):

> table(my.list)
#          my.list.2
# my.list.1 0 1
#         0 1 0
#         1 0 2
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我宁愿不将paste这些变成一个字符串,然后如果我可以帮助它,则将它们重新分成矢量.

r

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

将各因子水平输出为观星汇总统计表中的虚拟变量

我正在使用 R 包stargazer创建高质量的回归表,我想用它来创建汇总统计表。我的数据中有一个因子变量,我希望汇总表显示因子在每个类别中的百分比——实际上,将因子分成一组互斥的逻辑(虚拟)变量,然后显示表中的那些。下面是一个例子:

> library(car)
> library(stargazer)
> data(Blackmore)
> stargazer(Blackmore[, c("age", "exercise", "group")], type = "text")

==========================================
Statistic  N   Mean  St. Dev.  Min   Max  
------------------------------------------
age       945 11.442  2.766   8.000 17.920
exercise  945 2.531   3.495   0.000 29.960
------------------------------------------
Run Code Online (Sandbox Code Playgroud)

但我试图获得一个额外的行,显示每组中的百分比(在这些数据中,% 控制和/或 % 患者)。我确定这只是观星者某个地方的一个选项,但我找不到它。有谁知道它是什么?

编辑:car::Blackmoor已将拼写更新为car::Blackmore.

regression r stargazer

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

将stargazer与通过对拆分data.frame进行重叠处理而创建的lm对象列表一起使用

我正在尝试为一组回归创建观星表,在该表中,我对数据的一个子集运行了每个回归。我认为,执行此操作的自然方法是使用split从我的数据创建data.frames列表,使用data.frames列表创建lm对象lapply列表,然后将该列表提供给stargazer。例如,

library(MASS)
library(stargazer)

data(Boston)

# This doesn't work
by.river <- split(Boston, Boston$chas)
fit <- lapply(by.river, lm, formula = crim ~ indus)
stargazer(fit, type = "text")

# % Error: Unrecognized object type.
# % Error: Unrecognized object type.
Run Code Online (Sandbox Code Playgroud)

如果我将它们手动分割,效果很好:

# This works
fit2 <- vector(mode = "list", length = 2)
fit2[[1]] <- lm(crim ~ indus, data = Boston, subset = (chas == 0))
fit2[[2]] <- lm(crim ~ indus, data = Boston, subset = (chas == …
Run Code Online (Sandbox Code Playgroud)

r stargazer

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

data.table如何在键列上排序NA值?

使用data.table,假设我使用两列设置​​密钥,其中一列缺少值.数据表似乎将NA值排序为第一个值.

require(data.table)
set.seed(919)

# Create sample data
dt <- data.table(
  key1 = rep(1:10, each = 10),
  key2 = rep_len(letters, 100)
  )

# Set some key2 values to missing
dt[sample(1:100, 10), "key2"] <- NA

# Set key (sort)
setkeyv(dt, c("key1", "key2"))
dt
# 1:    1   NA
# 2:    1    a
# 3:    1    b
# 4:    1    c
# 5:    1    d
# 6:    1    f
# 7:    1    g
# 8:    1    h
# 9:    1    i
# …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

如何将新摘要列的名称传递给函数中的data.table?

假设我想创建一个从R中的data.table计算摘要数据集的函数,我希望能够以编程方式传递新计算变量的名称.

例如:

library(data.table)

# generate some fake data
set.seed(919)
dt <- data.table(x = rnorm(50), by.var = rep(c("a", "b"), 25))
dt[, list(group.means = mean(x)), by = "by.var"]  # This is what I want

# But I want to do in a function, so I can do it repeatedly:
groupMeans <- function(out.var, by.var, dat = dt) {
  return(dat[, list(out.var = mean(x)), by = by.var])  # doesn't work
}

groupMeans("group.means", "by.var")  # out.var should be "group.means"
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

r data.table

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

标签 统计

r ×11

data.table ×3

dplyr ×3

ggplot2 ×2

stargazer ×2

na ×1

regression ×1

subset ×1

tidyr ×1