1

我试图生成一个对话框,用户可以在其中选择要保留的元素,但是我要保留的项目是一个字符,但看起来 R 正在根据它们的字母顺序为它们提供数值。这是一个示例(我希望对话框中的列表为 1:Red、2:Yellow、3:Blue,而不是它给我 2、3、1):

library(dplyr)
library(tcltk)
library(utils)

x<-c(1,2,5)
y<-c(7,2.2,8)
c<-c("red", "yellow", "blue")

df<-as.data.frame(cbind(x,y,c),stringsasfactors=FALSE)

answer<-tk_select.list(df$c, preselect = NULL, multiple = TRUE,
            title = "Select items to keep:")

selected_df<-filter(df, c %in% answer)

selected_df
4

1 回答 1

1

我们可以创建data.frameas

df <- data.frame(x, y, c, stringsAsFactors = FALSE)

有了这个,输出selected_df

selected_df
#  x y   c
#1 1 7 red

注意:stringsasfactors不等于stringsAsFactors. 所以,这些character列仍然是factor

str(as.data.frame(cbind(x,y,c),stringsasfactors=FALSE) )
# 'data.frame': 3 obs. of  3 variables:
#$ x: Factor w/ 3 levels "1","2","5": 1 2 3
#$ y: Factor w/ 3 levels "2.2","7","8": 2 1 3
#$ c: Factor w/ 3 levels "blue","red","yellow": 2 3 1

此外,as.data.frame(cbind, 会有不必要的问题,因为cbind返回 amatrix并且matrix只能有一个,class即所有列都转换为character类,因为 'c' 中的值是character。当我们使用as.data.framewith 时stringsAsFactors = FALSE,它确实创建了character类,但numeric列应保持为数字

于 2020-03-28T21:50:05.110 回答