我现在正在学习R,我需要找到一种方法来获取这样的数据框
m b
1 5
2 9
3 14
4 5
5 7
6 9
到这个
m b length
1 5 short
2 9 short
3 14 medium
4 5 medium
5 7 long
6 9 long
其中长度列的标准基于m列中的数字(1-2短,3-4中,5-6长)
我想这样做的原因所以我可以使用ggplot直方图并按长度分组并创建一个躲闪的直方图
实际上,如果我可以跳过创建一个新列,那就更好了。但我无法在ggplot
中看到如何做到这一点例如,我想做ggplot(df,aes(b,group=length,fill=length))+geom_histogram(position="dodge",binwidth=2)
答案 0 :(得分:2)
您可以使用cut
cut(df$m, breaks = c(0,2.5,4.5,Inf), labels=c('short', 'medium', 'long'))
[1] short short medium medium long long
Levels: short medium long
答案 1 :(得分:0)
一种选择可能是使用mutate
中的between
和dplyr
来添加另一列length
。
步骤可以是:
library(dplyr)
# data
df <- read.table(text = "m b
1 5
2 9
3 14
4 5
5 7
6 9", header = T, stringsAsFactors = F)
df <- df %>% mutate(length = ifelse(between(m,1,2), "short",
ifelse(between(m,3,4),"medium","long")))
#Result
# m b length
#1 1 5 short
#2 2 9 short
#3 3 14 medium
#4 4 5 medium
#5 5 7 long
#6 6 9 lon
可以避免添加新列length
。只需将length
替换为factor(ceiling(m/2))
来电中的ggplot
。
因此呼叫将是:
ggplot(df,aes(b,group=factor(ceiling(m/2)),
fill=factor(ceiling(m/2), labels = c("Short","Medium", "Long"))))+
geom_histogram(position="dodge",binwidth=2)+
labs(fill = "Length")
但是你必须手动命名legend
。