R:为整个列赋一个新值,否则列保持原样

  • 本文关键字:新值 一个 dataframe user-input
  • 更新时间 :
  • 英文 :


我试图"动态地"改变不同数据帧的特定列值。为此,我使用svDialogs包来允许一些较小的值输入。

我得到的代码是:

library(svDialogs)
a <- iris
b <- attitude
dfs <- c("a", "b")
for(df in dfs) {
  df.tmp <- get(df)
  for(i in 1:length(names(df.tmp))){
    df.tmp[i] <- dlgInput(sprintf('Enter new column value for "%s" and press ok. Click Abort to change nothing', names(df.tmp)[i]), Sys.info()["n"])$res
  } 
  assign(df, df.tmp)
}

这段代码将输入的数字/字符串分配给显示的整个列。但问题是,当点击中止(在弹出对话框)它分配NA列。好吧,我需要的是,当点击中止列保持它是怎样的。我怎么能把那样的东西存档呢?我尝试了一些不同的else声明,但我没有成功。有人有什么想法吗?提前感谢!

编辑:如果我的列是这样的

A    B   C
5    6   10
2    3   8
car  bus car
7    77  8

然后弹出问题:为"A"输入新的列值并按ok。单击"中止"不更改任何内容。=>点击

流产

为"B"输入新的列值并按ok。单击"中止"不更改任何内容。=>我写Test,然后点击

O。K

为"C"输入新的列值并按ok。单击"中止"不更改任何内容。=>点击

流产

结果data.frame如下所示:

A    Test C
5    6    10
2    3    8
car  bus  car
7    77   8

在这个例子中,我将用户输入捕获到一个变量中,并检查它是否为空。当我运行这个例子时,我输入了1,2,3,4,然后按了两次取消键,并继续输入8到14之间的整数。

library(svDialogs)
a <- iris
b <- attitude
dfs <- c("a", "b")
for(df in dfs) {
  df.tmp <- get(df)
  for(i in 1:length(names(df.tmp))){
    ui <- dlgInput(sprintf('Enter new column value for "%s" and press ok. Click Abort to change nothing', names(df.tmp)[i]), default = "", Sys.info()["n"])$res
    if (length(ui) == 0) {
      next
    } else {
      df.tmp[i] <- ui
    }
  } 
  assign(df, df.tmp)
}

结果如下。

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1            1           2            3           4  setosa
2            1           2            3           4  setosa
3            1           2            3           4  setosa
4            1           2            3           4  setosa
5            1           2            3           4  setosa
6            1           2            3           4  setosa
> head(b)
  rating complaints privileges learning raises critical advance
1     43          8          9       11     12       13      14
2     63          8          9       11     12       13      14
3     71          8          9       11     12       13      14
4     61          8          9       11     12       13      14
5     81          8          9       11     12       13      14
6     43          8          9       11     12       13      14

相关内容

  • 没有找到相关文章

最新更新