我创建了一个数据框:
for (int i = 0; i < toss; i++) {
numberShowing = i;
result=i;
toss --;
System.out.println(result);
} if (toss == 0){
toss = 10;
}
这导致df <- mydata %>%
mutate(length.class=cut(mydata$count,breaks = c(1, 10, 100, 1000, 10000),include.lowest=TRUE)) %>%
group_by(length.class) %>%
summarise(count = n())
的值类似于&#34;(100,1e + 03)&#34;而我更喜欢&#34;(100,1000)&#34;。但是,手动更改它不起作用:
df$length.class
为什么更改字符串是不可能的,是什么尝试R告诉我这条消息?
奖金问题:如何获取原始值或解决已更改的行(4)?执行更改命令后,现在有一个&#34; NA&#34;而不是&#34;(100,1e + 03)&#34;。
答案 0 :(得分:5)
dig.lab
中的cut
参数应该注意这一点。
来自文档:
未给出标签时使用的整数。它决定了 格式化中断号码时使用的位数。
在您的情况下,您希望显示5位数字,因此您的代码将是
mydata %>%
mutate(length.class = cut(count, breaks = c(1, 10, 100, 1000, 10000),
include.lowest = TRUE, dig.lab = 5))
结果因素的级别如下:
[1] "[1,10]" "(10,100]" "(100,1000]" "(1000,10000]"
答案 1 :(得分:1)
警告(下方)告诉您所有需要知道的事项。
Warnmeldung:
In `[<-.factor`(`*tmp*`, df$length.class == "(100,1e+03]", value = c(1L, :
invalid factor level, NA generated
df$length.class
是factor
,其值存储为不同的levels
。您正试图以错误的方式替换值。适当的方法是更改levels
,而不是显示的值。因子存储为整数,内存中的整数与用于显示的levels
之间存在映射。
第一个选项是紧凑的,尽管它不可读。或者你总是可以使用两行代码
levels(df$length.class)[ which(levels(df$length.class) == "(100,1e+03]") ] <- "(100,1000]"
lvl_idx <- which(levels(df$length.class) == "(100,1e+03]")
levels(df$length.class)[lvl_idx] <- "(100,1000]"
答案 2 :(得分:0)
library(dplyr)
brks <- 10^(0:4)
# ensure one in each bin
mydata <- data.frame(count = brks[-1] - diff(brks)/2)
# create labels to be used in `cut`
lbls <- mapply(paste0, "(", head(brks, n = -1), ",", brks[-1], "]")
# fix the first, it's open on the left
lbls[1] <- paste0("[", brks[1], ",", brks[2], "]")
df <- mydata %>%
mutate(length.class = cut(count, breaks = brks, labels = lbls,
include.lowest = TRUE)) %>%
group_by(length.class) %>% summarise(count = n())
df
# # A tibble: 4 x 2
# length.class count
# <fctr> <int>
# 1 [1,10] 1
# 2 (10,100] 1
# 3 (100,1000] 1
# 4 (1000,10000] 1
如果您不想重做计算,只需执行以下操作:
labels(df$length.count) <- lbls
(假设你根据等级/箱数正确定义了lbls
。)
关于代码的一些注释:
mydata$
内不需要mutate
:您的代码引用了管道外mydata$count
的值,该值可能与{{1}的当前值不同管道中data.frame的列;它不在这里,但它很容易,特别是前面的count
或mutate
动词。