R 检索子集后面的名称(表),其中只有1个观察值

R 检索子集后面的名称(表),其中只有1个观察值,r,R,我的问题是,当我在对表进行子集设置后尝试检索names(myresults)时,当返回的子集只有一个结果时,我会得到null。r返回一个整数(在本例中为1),而不是返回行名称的字符向量 这是一张桌子 head(tbl) 1 2 3 4 5 6 afford 0 1 0 0 0 0 app 0 0 0 1 0 0 back 0 1 0 0 0 0 cancel 0 0 0 0 1 0

我的问题是,当我在对表进行子集设置后尝试检索
names(myresults)
时,当返回的子集只有一个结果时,我会得到null。r返回一个整数(在本例中为1),而不是返回行名称的字符向量

这是一张桌子

head(tbl)
               1 2 3 4 5 6
      afford   0 1 0 0 0 0
      app      0 0 0 1 0 0
      back     0 1 0 0 0 0
      cancel   0 0 0 0 1 0
      charg    0 0 0 0 0 1
      download 0 0 0 0 0 1
我已经在一个循环中对表进行了子集设置,以便为每个组返回一个表。如果某个术语属于某个组,则其值为1:

for (i in 1:ncol(tbl)) {
  t <- tbl[which(tbl[,i]==1),i]
  nam <- names(t)
  df <- as.data.frame(nam)
  names(df) <- paste0("Cluster ",i)
  print(kable(df))
}
因此,我可以为
tbl[,3]
获取
names(t)
,其中它有3个返回的实例,但对于只有1个的
tbl[,4]
则没有

> t <- fintab[which(fintab[,4]==1),4]
> names(t)
NULL # expected "app"

> t <- fintab[which(fintab[,4]==1),4]
> names(t)
[1] "aword" "cat"    "dog"


当我们对单个列进行子集设置时,我们会得到逻辑索引(
tbl[,4]==1
——除非存在NAs,否则无需使用
which
进行包装。在这种情况下,
which
删除这些NAs)并使用它对列向量进行子集设置

tbl[,4][tbl[,4]==1]
#  app 
#  1 

tbl[,3][tbl[,3]==1]
#   cat blabla   time 
#     1      1      1 

什么是
tbl
?这是一个
matrix/table/data.frame
?嗨,上下文:如果你显示
tbl的
dput
,我会是tbl,我们可以使用
drop=FALSE
它也会有名称
tbl[tbl[,4]==1,4,drop=FALSE]
行名称(tbl[tbl[,4]==1,4,drop=FALSE])#[1]“应用程序”
谢谢,但是您的评论中的drop=FALSE怎么办?我抬头看了看,但什么也没看到。drop=FALSE做什么,因为它起作用了too@DougFir它将确保原始尺寸不会下降。适用于矩阵/data.frame/table等当有单列/单行时,它会下降到一个向量。更多信息可在
?“[”
> str(tbl)
 'table' int [1:33, 1:6] 0 0 0 0 0 0 0 0 0 0 ...
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:33] "aword" "app" "cat" "dog" ...
  ..$ : chr [1:6] "1" "2" "3" "4" ...
> 
> dput(tbl)
structure(c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 
1L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 
1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 
0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 
0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 
0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L), .Dim = c(33L, 6L), .Dimnames = structure(list(
    c("aword", "app", "back", "cancel", "charg", "download", 
    "enough", "expens", "get", "great", "just", "like", "love", 
    "cat", "dog", "bla", "month", "much", "need", 
    "never", "phone", "pleas", "blabla", "realli", "term", "sign", 
    "thank", "time", "triangle", "use", "want", "will", "work"), c("1", 
    "2", "3", "4", "5", "6")), .Names = c("", "")), class = "table")
tbl[,4][tbl[,4]==1]
#  app 
#  1 

tbl[,3][tbl[,3]==1]
#   cat blabla   time 
#     1      1      1