R 中是否有一种方法可以使用用户输入更新数据帧的特定单元格?
Is there a method in R to update specific cells of a dataframe with user input?
免责声明:保留一两个奇怪的脚本,我对 R/coding 还是很陌生,这是我第一次 post 在这里,所以请保持温和。我为事情可能有多么模糊而道歉,我现在根本没有编码词汇来最好地描述我正在尝试做的事情。
无论如何:
我有一个数据框,其中 b
列描述了 cookie 的数量,x
,留在罐子里,a
列包含所有罐子的名称,y
, 从中取出饼干。
由于从许多不同的 jar 中获取的 cookie 的数量和频率很高,因此此数据框需要定期更新。
截至目前,我有一个脚本将从 jar 和 cookie 的主列表中提取并编写一个 csv,其中仅包含订单所需的 jar 以及每个 jar 中剩余的 cookie 数量。
我想添加一些 readline(prompt)
,它会针对订单中的每个 Jar 询问用户类似 "Amount of cookies taken from Jar z
: " 的内容,然后使用提供的用户输入。
除了如何告诉 R 在用户提示中包含 z
之外,我知道如何做我在这里提到的所有事情。
所以,换句话说,如果我有一个订单,其中有人从罐子 5、11 和 31 请求 cookie,我该如何告诉 R 提示:
'Amount of cookies taken from JAR 5: '
等待输入
'Amount of cookies taken from JAR 11: '
等待输入
'Amount of cookies taken from JAR 31: '
等待输入
这是一个如何使用 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
列中减去它(您甚至可以打印每个 jar 中的当前 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
是否符合您要查找的内容?
免责声明:保留一两个奇怪的脚本,我对 R/coding 还是很陌生,这是我第一次 post 在这里,所以请保持温和。我为事情可能有多么模糊而道歉,我现在根本没有编码词汇来最好地描述我正在尝试做的事情。
无论如何:
我有一个数据框,其中 b
列描述了 cookie 的数量,x
,留在罐子里,a
列包含所有罐子的名称,y
, 从中取出饼干。
由于从许多不同的 jar 中获取的 cookie 的数量和频率很高,因此此数据框需要定期更新。
截至目前,我有一个脚本将从 jar 和 cookie 的主列表中提取并编写一个 csv,其中仅包含订单所需的 jar 以及每个 jar 中剩余的 cookie 数量。
我想添加一些 readline(prompt)
,它会针对订单中的每个 Jar 询问用户类似 "Amount of cookies taken from Jar z
: " 的内容,然后使用提供的用户输入。
除了如何告诉 R 在用户提示中包含 z
之外,我知道如何做我在这里提到的所有事情。
所以,换句话说,如果我有一个订单,其中有人从罐子 5、11 和 31 请求 cookie,我该如何告诉 R 提示:
'Amount of cookies taken from JAR 5: '
等待输入
'Amount of cookies taken from JAR 11: '
等待输入
'Amount of cookies taken from JAR 31: '
等待输入
这是一个如何使用 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
列中减去它(您甚至可以打印每个 jar 中的当前 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
是否符合您要查找的内容?