标签: levels

重新排序因子的级别而不更改值的顺序

我的数据框有一些数值变量和一些分类factor变量.这些因素的等级顺序不是我希望它们的方式.

numbers <- 1:4
letters <- factor(c("a", "b", "c", "d"))
df <- data.frame(numbers, letters)
df
#   numbers letters
# 1       1       a
# 2       2       b
# 3       3       c
# 4       4       d
Run Code Online (Sandbox Code Playgroud)

如果我更改了级别的顺序,则这些字母不再带有相应的数字(我的数据从这一点开始是完全无意义的).

levels(df$letters) <- c("d", "c", "b", "a")
df
#   numbers letters
# 1       1       d
# 2       2       c
# 3       3       b
# 4       4       a
Run Code Online (Sandbox Code Playgroud)

我只想更改级别顺序,因此在绘图时,条形图按所需顺序显示 - 可能与默认的字母顺序不同.

r levels

114
推荐指数
5
解决办法
8万
查看次数

`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
查看次数

ggplot2保持未使用的级别barplot

我想在我的条形图中绘制未使用的级别(即,计数为0的级别),但是,未使用的级别被删除,我无法弄清楚如何保留它们

df <- data.frame(type=c("A", "A", "A", "B", "B"), group=rep("group1", 5))
df$type <- factor(df$type, levels=c("A","B", "C"))

ggplot(df, aes(x=group, fill=type)) + geom_bar()
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我想看到C计数为0,但它完全没有...

感谢Ulrik的帮助

编辑:

这就是我想要的

df <- data.frame(type=c("A", "A", "A", "B", "B"), group=rep("group1", 5))
df1 <- data.frame(type=c("A", "A", "A", "B", "B", "A", "A", "C", "B", "B"), group=c(rep("group1", 5),rep("group2", 5)))

df$type <- factor(df$type, levels=c("A","B", "C"))
df1$type <- factor(df1$type, levels=c("A","B", "C"))
df <- data.frame(table(df))

df1 <- data.frame(table(df1))

ggplot(df, aes(x=group, y=Freq, fill=type)) + geom_bar(position="dodge")
ggplot(df1, aes(x=group, y=Freq, fill=type)) + geom_bar(position="dodge")
Run Code Online (Sandbox Code Playgroud)

猜测解决方案是使用table()计算频率然后绘图

r legend levels ggplot2

72
推荐指数
3
解决办法
3万
查看次数

如何从数据框中删除未使用的级别?

给出以下模拟数据:

set.seed(123)
x <- data.frame(let = sample(letters[1:5], 100, replace = T), 
                num = sample(1:10, 100, replace = T))
y <- subset(x, let != 'a')
Run Code Online (Sandbox Code Playgroud)

创建y$let收益表

a  b  c  d  e 
0 20 21 22 18
Run Code Online (Sandbox Code Playgroud)

但我不想a再表现出来了.如果我尝试这样做:

levels(y$let) <- factor(y$let)
Run Code Online (Sandbox Code Playgroud)

我弄乱频率,因为现在table(y$let)给了我

b  d  c  e 
0 20 21 40 
Run Code Online (Sandbox Code Playgroud)

我知道我可以做到xtabs(~ y$let, drop.unused.levels = T)并解决这个问题,但它并没有重置核心的变量级别(这对我很重要,因为这是我对数据集的一个早期改变,它将继续贯穿始终整个分析).而且,这xtabs是一个不同的类table,这将使我在项目后期头痛.

问题是:我如何自动更改,levels(y$let)以便它不显示创建子集时丢弃的级别?在这种情况下,我该如何展示[1] "b" "c" "d" "e"

r levels

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

为什么标签和级别的术语如此奇怪?

一个不可设置的函数的例子是labels.您只能在使用因子函数创建因子标签时设置它们.没有labels<-功能.不是因为'标签'和'水平'因素有任何意义....

>  fac <- factor(1:3, labels=c("one", "two", "three"))
> fac
[1] one   two   three
Levels: one two three
> labels(fac)
[1] "1" "2" "3"
Run Code Online (Sandbox Code Playgroud)

好吧,我问过标签,人们可能认为这是由因子调用设定的,但是我得到了一些东西......这个词是什么,不直观?

> levels(fac)
[1] "one"   "two"   "three"
Run Code Online (Sandbox Code Playgroud)

所以看来设置标签确实是设置级别.

>  fac <- factor(1:3, levels=c("one", "two", "three"))
> levels(fac)
[1] "one"   "two"   "three"
Run Code Online (Sandbox Code Playgroud)

好的,这是预期的.那么设置水平时标签是什么?

>  fac <- factor(1:3, levels=c("one", "two", "three"), labels=c("x","y", "z") )
> labels(fac)
[1] "1" "2" "3"
> levels(fac)
[1] "x" "y" "z"
Run Code Online (Sandbox Code Playgroud)

如果你问我,会很奇怪.似乎因素的"标签"参数胜过级别规范的任何"级别"参数.为什么会这样?看起来像一个混乱的术语.为什么labels()返回我想象的用as.character(as.numeric(fac))检索的东西?

(这是一个切向评论[标记为]在早期的关于赋值函数的答案中,我被要求转移到一个问题.所以这是你有机会启发我.)

r levels factors

34
推荐指数
2
解决办法
1675
查看次数

计算深度或嵌套列表的最深层次

A有一个真正的问题(并且头疼)有一个任务......

我在一个入门编程课程中,我必须编写一个函数,给定一个列表,它将返回它所达到的"最大"深度...例如:[1,2,3]将返回1,[ 1,[2,3]]将返回2 ...

我写了这段代码(这是我能得到的最好的T_T)

def flat(l):
    count=0
    for item in l:
        if isinstance(item,list):
            count+= flat(item)
    return count+1
Run Code Online (Sandbox Code Playgroud)

然而,它显然没有像它应该的那样工作,因为如果有列表不计入最大深度,它仍然提出反击......

例如:当我使用[1,2,[3,4],5,[6],7]的函数时,它应返回2,但它返回3 ...

任何想法或帮助将非常感谢^^非常感谢!! 我已经持续数星期了......

python nested list levels

22
推荐指数
4
解决办法
2万
查看次数

R-根据因子水平分割直方图

这是我的数据:

type<-rep(c(0,1),100) 
diff<-rnorm(100)
data<-data.frame(type,diff)
Run Code Online (Sandbox Code Playgroud)

如果我想绘制历史图diff,我这样做:

hist(data$diff)
Run Code Online (Sandbox Code Playgroud)

但是我想要做什么来分割我的直方图type.我能做到这一点:

par(mfrow=c(1,2))
hist(data$diff[data$type==0])
hist(data$diff[data$type==1])
Run Code Online (Sandbox Code Playgroud)

但这给我的是两个不同的直方图.我想要做的就是生产出一个直方图diff0一侧及diff1,在另一侧.像这样的东西,条形连续,没有断裂或边界.这可能意味着轴将被分成两个因子. 在此输入图像描述

r histogram levels

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

按级别平均值

也许这很简单,但我无法在网上找到答案.我按平均因素按平均计算有问题.我的数据看起来很典型:

factor, value
a,1
a,2
b,1
b,1
b,1
c,1
Run Code Online (Sandbox Code Playgroud)

我想得到向量A包含只有级别"a"的意思如果我在consol上键入A我想得到1.5而这种计算方法的方法,必须使用因子.

提前感谢您的帮助.

r mean levels factors

15
推荐指数
4
解决办法
6万
查看次数

如何更改因子级别的名称?

训练集

trainSample <- cbind(data[1:980,1], data[1:980,2]) cl <-
factor(c(data[1:980,3]))
Run Code Online (Sandbox Code Playgroud)

测试集

testSample <- data(data[981:1485,1], data[981:1485,2])
cl.test <- clknn
Run Code Online (Sandbox Code Playgroud)

预测

k <- knn(trainSample, testSample, cl, k = 5)
Run Code Online (Sandbox Code Playgroud)

产量

< k

  [1] 2 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 1 2 2 1 1 2 2 1 1 2 2 2 2 1 2 2 2 2 2 2 1 2 …
Run Code Online (Sandbox Code Playgroud)

r rename levels

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

删除输出中的levels属性 - R.

我是R Programming的新手.我编写了一个示例程序,它返回矩阵中特定列的值.当我打印价值时,我会得到类似的东西

[1] APPLE
2 Levels : 1 2 
Run Code Online (Sandbox Code Playgroud)

如何只获得没有输出中的级别的值.

提前致谢.

r matrix levels

11
推荐指数
2
解决办法
5630
查看次数

标签 统计

levels ×10

r ×9

factors ×2

ggplot2 ×1

histogram ×1

legend ×1

list ×1

matrix ×1

mean ×1

nested ×1

python ×1

rename ×1

types ×1