【问题标题】:Assign single value to grouped variable, R将单个值分配给分组变量 R
【发布时间】:2016-10-14 06:39:46
【问题描述】:

我有一个带有两个变量的 data.frame。我需要按 var1 对它们进行分组,并将 var2 中的每个 x 替换为该组中唯一的不同值。

例如:

   var1 var2
1     1    a
2     2    a
3     2    x
4     3    b
5     4    c
6     5    a
7     6    c
8     6    x
9     7    c
10    8    x
11    8    b
12    8    b
13    9    a

结果应该是:

   var1 var2
1     1    a
2     2    a
3     2    a <-
4     3    b
5     4    c
6     5    a
7     6    c
8     6    c <-
9     7    c
10    8    b <-
11    8    b
12    8    b
13    9    a

我确实设法解决了这个例子:

dat <- data.frame(var1=c(1,2,2,3,4,5,6,6,7,8,8,8,9), var2=c("a","a","x","b","c","a","a","x","c","x","b","b","a"))

dat %>% group_by(var1) %>% mutate(
  var2 = as.character(var2),
  var2 = ifelse(var2 == 'x',var2[order(var2)][1],var2))

但这不适用于我的真实数据,因为排序:(

我需要另一种方法,我想到了一些类似检查“not x”的方法,但我没有找到解决方案。

任何帮助表示感谢!

【问题讨论】:

  • 如果同一组中有两个或多个唯一的非 x 值怎么办?像 var1 = c(10,10,10); var2=c(“a”,”b”,”x”)。如果 x 是组中的唯一值怎么办?

标签: r group-by dplyr


【解决方案1】:

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(df1)),按'var1'分组,我们得到不是'x'的'var2',选择第一个观察值并赋值(:=)到“var2”。

library(data.table)
setDT(df1)[, var2 := var2[var2!='x'][1], var1]

或者dplyr

library(dplyr)
df1 %>%
  group_by(var1) %>%
  mutate(var2 = var2[var2!="x"][1])
#    var1  var2
#   <int> <chr>
#1      1     a
#2      2     a
#3      2     a
#4      3     b
#5      4     c
#6      5     a
#7      6     c
#8      6     c
#9      7     c
#10     8     b
#11     8     b
#12     8     b
#13     9     a

【讨论】:

    猜你喜欢
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多