小编use*_*472的帖子

用dplyr mutate改变因子水平

这可能很简单,我觉得这很愚蠢.我想使用mutate更改数据框中因子的级别.简单的例子:

library("dplyr")
dat <- data.frame(x = factor("A"), y = 1)
mutate(dat,levels(x) = "B")
Run Code Online (Sandbox Code Playgroud)

我明白了:

Error: Unexpected '=' in "mutate(dat,levels(x) ="
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?如何用mutate改变因子水平?

r dplyr

41
推荐指数
6
解决办法
7万
查看次数

从字符串创建嵌套列表结构

我有一个由 n 个子字符串组成的字符串。它可能看起来像这样:

string <- c("A_AA", "A_BB", "A_BB_AAA", "B_AA", "B_BB", "B_CC")
Run Code Online (Sandbox Code Playgroud)

此字符串中的每个子组件都以“_”与其他任何子组件分隔。这里,第一级由值“A”和“B”组成,第二级由“AA”、“BB”和“CC”组成,第三级由“AAA”组成。更深的嵌套是可能的,解决方案应该扩展到这些情况。嵌套不一定是平衡的,例如“A”只有两个孩子,而“B”有三个,但它也有一个“B”没有的孙子。

本质上,我想在某种 R 对象(最好是列表)中重新创建此字符串中的嵌套结构。因此,嵌套列表结构如下所示:

list("A" = list("AA", "BB" = list("AAA")),
"B" = list("AA", "BB", "CC"))

> $A
  $A[[1]]

  [1] "AA"
  $A$BB
  $A$BB[[1]]
  [1] "CCC"

  $B
  $B[[1]]
  [1] "AA"

  $B[[2]]
  [1] "BB"

  $B[[3]]
  [1] "CC"
Run Code Online (Sandbox Code Playgroud)

对此的任何帮助表示赞赏

string r list

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

在组上创建对的滚动索引

我需要从包含组的数据集创建(带有R)对的滚动索引.请考虑以下数据集:

times <- c(4,3,2)
V1 <- unlist(lapply(times, function(x) seq(1, x)))
df <- data.frame(group = rep(1:length(times), times = times), 
                 V1 = V1, 
                 rolling_index = c(1,1,2,2,3,3,4,5,5))

df
  group V1 rolling_index
1     1  1             1
2     1  2             1
3     1  3             2
4     1  4             2
5     2  1             3
6     2  2             3
7     2  3             4
8     3  1             5
9     3  2             5
Run Code Online (Sandbox Code Playgroud)

我的数据框包括变量组和V1.在每个组内,V1指定一个运行索引(可以从1开始,也可以不从1开始).

我想创建一个看起来像rolling_index的新索引变量.此变量将同一组中的行和连续的V1值分组,从而创建新的滚动索引.这个新索引必须是连续的组.如果组内存在不均匀的行数(例如,组2),则最后一行将获得其自己的滚动索引值.

r

3
推荐指数
2
解决办法
173
查看次数

正确使用apply-functions从列表元素组合生成列表

我有一个列表对象,看起来像这样

list1 <- list(c("A1", "A2"), "B", c("C1", "C2"))
Run Code Online (Sandbox Code Playgroud)

从这里我想生成一个列表,其中包含list1中所有元素组合的列表.对于list1,它应该是这样的

list2 <- list(list("A1", "B", "C1"), list("A1", "B", "C2"), list("A2", "B", "C1"), list("A2", "B", "C2"))
Run Code Online (Sandbox Code Playgroud)

如果list1中有更多元素,则无法手动生成.我如何在R中这样做呢?

r list apply

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

标签 统计

r ×4

list ×2

apply ×1

dplyr ×1

string ×1