我有一个包含数字的data.frame。我想在data.frame中创建一个新列,它将使用(letters[]
)容纳因子标签。我希望这些因子标签可以从我拥有的一系列数字构建,并且每次都可以改变。
例如,我的原始DF有1列x
包含数字,然后我有一系列数字(3,7,9)。因此,我需要根据数字序列填充新的FLABEL
列,即前3行为a
,后4行为b
,依此类推。
x FLABEL
0.23 a
0.21 a
0.19 a
0.27 b
0.25 b
0.22 b
0.15 b
0.09 c
0.32 c
0.19 d
0.17 d
我正在努力解决这个问题,我假设某种形式的for-loop,因为我的数字序列每次运行时都会有不同的长度所以我可以填充字母a& b ......或更多。
答案 0 :(得分:0)
基于@scoa的评论,我建议采用以下修改方法:
series <- c(3, 7, 9)
series <- c(series, nrow(DF)) # This ensures that the sequence extends to the last row of DF
series2 <- c(series[1] ,diff(series))
DF$FLABEL <- rep(letters[1:length(series2)], series2)
#> DF
# x FLABEL
#1 0.23 a
#2 0.21 a
#3 0.19 a
#4 0.27 b
#5 0.25 b
#6 0.22 b
#7 0.15 b
#8 0.09 c
#9 0.32 c
#10 0.19 d
#11 0.17 d
通过使用diff()
,基于输入向量series
中的索引号计算每个序列的长度。在这种情况下,索引值3,7,9被转换为后续字母的重复次数,直到数据帧的最后一行,并存储在series2
:3,4,2,2。
数据强>
text <- "x FLABEL
0.23 x
0.21 x
0.19 x
0.27 x
0.25 x
0.22 x
0.15 x
0.09 x
0.32 x
0.19 x
0.17 x"
DF <- read.table(text = text, header=T)