首页 > 解决方案 > R中是否有一种方法可以使用用户输入更新数据框的特定单元格?

问题描述

免责声明:保存一两个奇怪的脚本,我对 R/coding 还是很陌生,这是我在这里的第一篇文章,所以请保持温和。对于事情可能多么模糊,我深表歉意,我现在根本没有编码词汇来最好地描述我正在尝试做的事情。

反正:

我有一个数据框,其中列b描述了x留在罐子中的 cookie 的数量,列a包含所有罐子的名称y,从中获取 cookie。

由于从许多不同的 jar 中获取的 cookie 的数量和频率很高,因此该数据框需要例行更新。

到目前为止,我有一个脚本,该脚本将从 jar 和 cookie 的主列表中提取并编写一个 csv,其中仅包含订单所需的 jar 以及每个 jar 中剩余多少 cookie。

我想为订单中的每个 Jar 添加一些readline(prompt)询问用户的信息,例如“从 Jar 获取的 cookie 数量z:”,然后使用提供的用户输入更新 jar 和 cookie 主列表中的确切单元格。

我知道如何做我在这里提到的所有事情,除了如何告诉 R 包含z在用户提示中。

因此,换句话说,如果我有一个订单表格,其中有人从 jar 5、11 和 31 请求 cookie,我如何告诉 R 提示:

'从 JAR 5 获取的 cookie 数量:'
等待输入
'从 JAR 11 获取的 cookie 数量:'
等待输入
'从 JAR 31 获取的 cookie 数量:'
等待输入

标签: rdataframepromptreadline

解决方案


这是一个如何使用for循环执行此操作的示例。

1)我们可以定义一个虚拟数据框:

df <- data.frame(Jars = LETTERS[1:5],
                 Cookie = sample(1:50,5))

所以你的数据框看起来像:

> df
  Jars Cookie
1    A      9
2    B     17
3    C     23
4    D     34
5    E     19

2)然后,用于迭代的代码Jars并要求每个输入并从Cookie列中减去它(您甚至可以打印每个罐子中当前的 cookie 数量以避免产生负面结果;)):

for(i in 1:nrow(df))
{
  x <- as.numeric(readline(paste0("How many in Jar ",df$Jars[i]," (current number:",df$Cookie[i],") : ")))
  df[i,"Cookie"] <- df[i,"Cookie"] - x
}

3)现在在行动:

> for(i in 1:nrow(df))
+   {
+     x <- as.numeric(readline(paste0("How many in Jar ",df$Jars[i]," (current number:",df$Cookie[i],") : ")))
+     df[i,"Cookie"] <- df[i,"Cookie"] - x
+   }
How many in Jar A (current number:9) :  0
How many in Jar B (current number:17) : 2
How many in Jar C (current number:23) : 1
How many in Jar D (current number:34) : 3
How many in Jar E (current number:19) : 0

4)现在你的数据框看起来像:

> df
  Jars Cookie
1    A      9
2    B     15
3    C     22
4    D     31
5    E     19

它是否与您正在寻找的内容相对应?


推荐阅读