相关疑难解决方法(0)

`level <-`(这是什么巫术?

在回答另一个问题时,@ Mayk发布了以下解决方案:https://stackoverflow.com/a/10432263/636656

dat <- structure(list(product = c(11L, 11L, 9L, 9L, 6L, 1L, 11L, 5L, 
                                  7L, 11L, 5L, 11L, 4L, 3L, 10L, 7L, 10L, 5L, 9L, 8L)), .Names = "product", row.names = c(NA, -20L), class = "data.frame")

`levels<-`(
  factor(dat$product),
  list(Tylenol=1:3, Advil=4:6, Bayer=7:9, Generic=10:12)
  )
Run Code Online (Sandbox Code Playgroud)

哪个产生输出:

 [1] Generic Generic Bayer   Bayer   Advil   Tylenol Generic Advil   Bayer   Generic Advil   Generic Advil   Tylenol
[15] Generic Bayer   Generic Advil   Bayer   Bayer  
Run Code Online (Sandbox Code Playgroud)

这只是矢量的打印输出,所以要存储它你可以做得更加困惑:

res <- `levels<-`(
  factor(dat$product),
  list(Tylenol=1:3, Advil=4:6, Bayer=7:9, Generic=10:12)
  )
Run Code Online (Sandbox Code Playgroud)

显然这是对level函数的某种调用,但我不知道这里做了什么.这种巫术的术语是什么,我如何在这个领域增加我的魔法能力?

types r levels

110
推荐指数
4
解决办法
6188
查看次数

在R中对因子中的2个级别进行分组

我有一列数据是A,B和C级别的因素,我有兴趣将这些级别中的两个组合成一个因子,所以它会变成A和B,B = B和C,或者可能是新的变量A和D,D = B和C.我可以通过使用if语句循环遍历列来提供大量方法来实现这一点,但我觉得应该有一个更优雅的方法,我想知道是否有人可以指出我正确的方向.

r

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

用于多个类别的ifelse样式重新编码的习语

我经常遇到这种情况,我认为必须有一个很好的成语.假设我有一个包含一系列属性的data.frame,包括"product".我还有一把钥匙,可以将产品转化为品牌+尺寸.产品代码1-3是Tylenol,4-6是Advil,7-9是拜耳,10-12是Generic.

什么是最快的(就人类时间而言)编码方式?

ifelse如果有3个或更少的类别,我倾向于使用嵌套的;如果有超过3个类型,则键入数据表并将其合并.任何更好的想法?Stata有一个非常漂亮的recode命令,虽然我相信它会促进数据代码混合有点过分.

dat <- structure(list(product = c(11L, 11L, 9L, 9L, 6L, 1L, 11L, 5L, 
7L, 11L, 5L, 11L, 4L, 3L, 10L, 7L, 10L, 5L, 9L, 8L)), .Names = "product", row.names = c(NA, 
-20L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

r recode r-factor

17
推荐指数
6
解决办法
2519
查看次数

结合R中的因子水平

我想把级别"A","B"组合成"A + B".我通过以下方式成功完成了此操作:

x <- factor(c("A","B","A","C","D","E","A","E","C"))
x
#[1] A B A C D E A E C
#Levels: A B C D E
l <- c("A+B","A+B","C","D+E","D+E")
factor(l[as.numeric(x)])
#[1] A+B A+B A+B C   D+E D+E A+B D+E C  
#Levels: A+B C D+E
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法来做到这一点?(即更多可解释的函数名称,例如combine.factor(f,old.levels,new.levels)将有助于更容易理解代码.)

此外,我试图找到一个很好的命名函数,可能在dplyr包中使用数据框但没有运气.最接近的实施是

df %>% mutate(x = factor(l[as.numeric(x)]))
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

结合分类因素水平的惯用方法

这是我正在尝试做的一个简单的例子:

iris %>%
  mutate(Species2 = ifelse(Species %in% c("setosa", "virginica"), "other", as.character(Species)) %>% as.factor) %>%
  str
# 'data.frame': 150 obs. of  6 variables:
#   $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
# $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
# $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
# $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 …
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

在data.table中对因子级别进行分组

我正在尝试将因子水平结合起来data.table并想知道是否存在data.table这样做的方法.

例:

DT = data.table(id = 1:20, ind = as.factor(sample(8, 20, replace = TRUE)))
Run Code Online (Sandbox Code Playgroud)

我想说类型1,3,8属于A组; 2和4属于B组; 和5,6,7在C组.

这就是我一直在做的事情,这个问题的完整版本速度很慢:

DT[ind %in% c(1, 3, 8), grp := as.factor("A")]
DT[ind %in% c(2, 4), grp := as.factor("B")]
DT[ind %in% c(5, 6, 7), grp := as.factor("C")]
Run Code Online (Sandbox Code Playgroud)

这个相关问题提出的另一种方法,我猜这样翻译:

DT[ , grp := ind]
levels(DT$grp) = c("A", "B", "A", "B", "C", "C", "C", "A")
Run Code Online (Sandbox Code Playgroud)

或许(考虑到我有65个基础组和18个聚合组,这感觉有点整洁)

DT[ , grp := ind]
lev <- letters(1:8)
lev[c(1, 3, 8)] <- "A"
lev[c(2, 4)] <- "B" …
Run Code Online (Sandbox Code Playgroud)

r data.table

4
推荐指数
1
解决办法
5927
查看次数

如何在R中的一个分类变量中组合两个级别

我现在正在学习R,我遇到了查找命令的问题.

我有分类数据

levels(job)
[1] "admin."        "blue-collar"   "entrepreneur"  "housemaid"    
[5] "management"    "retired"       "self-employed" "services"     
[9] "student"       "technician"    "unemployed"    "unknown"
Run Code Online (Sandbox Code Playgroud)

现在我想简化这些级别,例如

levels(job) 
[1] "class1"  "class2" "class3" "unknown"
Run Code Online (Sandbox Code Playgroud)

其中type1包括"admin.","entrepreneur",和"self-employed"; type2包括"blue-collar","management",和"technician"; type3包括"housemaid","student","retired",和"services"; unknown包括"unknown""unemployed".

为此,我可以使用哪个命令?谢谢!严

r

4
推荐指数
1
解决办法
9238
查看次数

R:如何降低数据框中的级别数量?

我在数据框中有一列超过 40 个级别,我想将其设为 4 个级别。重要的变量是“电子商务”、“技术”和“消费品”,我想归入“其他”的所有其他变量。我怎样才能把它变成4个级别?

r dataframe

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

标签 统计

r ×8

dplyr ×2

data.table ×1

dataframe ×1

levels ×1

r-factor ×1

recode ×1

types ×1