cbind警告:从一个简短变量中找到行名称并被丢弃

Ian*_*the 27 r dataframe

我有下面的cbind代码行,但我每次都收到一条警告消息.虽然代码仍然可以正常运行,但有没有办法解决警告?

dateset = subset(all_data[,c("VAR1","VAR2","VAR3","VAR4","VAR5","RATE1","RATE2","RATE3")])
dateset = cbind(dateset[c(1,2,3,4,5)],stack(dateset[,-c(1,2,3,4,5)]))
Run Code Online (Sandbox Code Playgroud)

警告:

Warning message:
   In data.frame(..., check.names = FALSE) :
        row names were found from a short variable and have been discarded
Run Code Online (Sandbox Code Playgroud)

提前致谢!

A5C*_*2T1 43

我猜你data.framerow.names:

A <- data.frame(a = c("A", "B", "C"), 
                b = c(1, 2, 3), 
                c = c(4, 5, 6), 
                row.names=c("A", "B", "C"))

cbind(A[1], stack(A[-1]))
#   a values ind
# 1 A      1   b
# 2 B      2   b
# 3 C      3   b
# 4 A      4   c
# 5 B      5   c
# 6 C      6   c
# Warning message:
# In data.frame(..., check.names = FALSE) :
#   row names were found from a short variable and have been discarded
Run Code Online (Sandbox Code Playgroud)

这里发生的是因为你不能默认row.names在a中复制data.frame,因为你没有告诉R在任何时候重复row.names将第一列重新循环到堆叠列的相同行数时,R只是丢弃了row.names.

与类似的相比data.frame,但没有row.names:

B <- data.frame(a = c("A", "B", "C"), 
                b = c(1, 2, 3), 
                c = c(4, 5, 6))

cbind(B[1], stack(B[-1]))
#   a values ind
# 1 A      1   b
# 2 B      2   b
# 3 C      3   b
# 4 A      4   c
# 5 B      5   c
# 6 C      6   c
Run Code Online (Sandbox Code Playgroud)

或者,您可以row.names = NULLcbind声明中设置:

cbind(A[1], stack(A[-1]), row.names = NULL)
#   a values ind
# 1 A      1   b
# 2 B      2   b
# 3 C      3   b
# 4 A      4   c
# 5 B      5   c
# 6 C      6   c
Run Code Online (Sandbox Code Playgroud)

如果您的原件row.names很重要,您也可以将它们添加回来:

cbind(rn = rownames(A), A[1], stack(A[-1]), row.names = NULL)
#   rn a values ind
# 1  A A      1   b
# 2  B B      2   b
# 3  C C      3   b
# 4  A A      4   c
# 5  B B      5   c
# 6  C C      6   c
Run Code Online (Sandbox Code Playgroud)

  • 对不起,阿南达.我根本不想挑战你. (3认同)
  • @RichardScriven,并不意味着它看起来那样,你有没有删除你的答案.正如我所指出的那样,`unlist`*应该*具有性能优势(更不用说它将与`factor`s一起工作,`stack`不会).事实上,我在我的[`Stacked`函数]的当前版本中使用它(https://github.com/mrdwab/splitstackshape/blob/devel/R/Stacked.R#L76)(最初基于`堆栈`)我想我会评论我在过程中发现的观察结果. (2认同)