我正在尝试创建一个新列,将我的数据中的一列分类为BMI类别,然后我可以将其转换为新的完整数据框。但是,我当前的方法只生成一个数字向量。因此,这似乎不会绑定回原始数据集。
这是我的代码:
BMI_cut <- cut(alldata$BMI,
breaks = c(-Inf, 18.5, 25.0, 30.0, Inf),
labels = c("<18.50", "18.50-24.99", "25.00-29.99", ">=30.00"),
right = FALSE)
BMIbind <- rbind(sorteddata, BMI_cut)
尝试此操作时,我收到错误消息:
警告信息:
1:在[<-.factor
(*tmp*
,ri,value = 2L)中:
无效因子水平,NA生成
2:在[<-.factor
(*tmp*
,ri,value = 2L)中:
无效因子水平,NA生成
结果是与原始数据绑定,没有BMI类别列。唯一的区别是值为&lt; NA&gt;,2和3的新行。我无法理解这一点。
我是R的完全初学者。另外,虽然有些包看起来像他们可以做得更容易,但我不能使用它们,因为这是一个任务。任何帮助将不胜感激。
答案 0 :(得分:0)
我看到了很多问题。一次,如上面的评论中已经提到的,你使用两个不同的data.frames。
此外,您似乎混淆了cbind
和rbind
。 rbind
汇总两个相同的data.frames ,而cbind
汇总不同的列。
最后,可以通过向data.frame添加另一列来完成此操作:
alldata$BMI_cut <- cut(alldata$BMI,
breaks = c(-Inf, 18.5, 25.0, 30.0, Inf),
labels = c("<18.50", "18.50-24.99", "25.00-29.99", ">=30.00"),
right = FALSE)
对rbind
和cbind
进行比较以下内容:
> rbind(data.frame(x=1:5), data.frame(x=6:10))
x
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
> cbind(data.frame(x=1:5), data.frame(x=6:10))
x x
1 1 6
2 2 7
3 3 8
4 4 9
5 5 10