r - R 中数据的子集化和分配

标签 r dataframe subset variable-assignment

我不确定 R 中特定类型的数据子集和分配会发生什么。

假设我有一个两列数据框,其中第一列是月份名称,第二列是一些数据。我将在这里做一个简单的示例,但我正在处理的数据框中的实际行要大得多。

x <- data.frame(c("october", "march", "february", "january"), rnorm(4), 
stringsAsFactors = FALSE)
names(x) <- c("months", "value")

通过以下方式对数据进行子集化和设置值是否安全?:

x[x[,1] == "october",1] <- "01/10"

我问这个是因为我不完全理解如果第一列中不存在匹配项会发生什么,例如:

x[x[,1] == "december",1] <- "01/12"

x[x[,1] == "十二月",1] 返回:

> x[x[,1] == "december",1]
[1] months value 
<0 rows> (or 0-length row.names)

为什么 R 接受对不存在的东西的赋值?我不清楚这种情况下会发生什么,我担心可能会发生一些不可预见的任务或行为。有人可以解释一下吗?

最佳答案

Why does R accept an assignment to something that doesn't exist?

我不知道您还希望看到什么其他行为。如果您想在没有修改任何行时获得提示,一种方法是使用 data.table:

library(data.table)
setDT(x)

x[ months == "december", months := "01/12", verbose = TRUE ]

这给出了...

Creating new index 'months'
Starting bmerge ...done in 0.02 secs
Detected that j uses these columns: months 
No rows match i. No new columns to add so not evaluating RHS of :=
Assigning to 0 row subset of 4 rows

请注意,最后两行告诉您没有任何行被修改。

如果您以某种方式将此控制台输出写入文本文件日志,那么您可以扫描它以找出是否有任何匹配“分配给 0 行子集”的实例。还可以通过“审核”包(如Jan Gorecki's dtq)获取修改的行的统计信息。 .


此语法的工作原理:

the data.table package 的语法是 DT[where, select|update|do, by] 。在本例中,我们正在进行“更新”并跳过 by争论。如果您选择使用该软件包,我建议您使用“入门”页面。

关于r - R 中数据的子集化和分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40981741/

相关文章:

python - 漂亮的打印 Pandas : how to set the columns as displayed rows (and rows as displayed columns)?

r - 动态选择数据框中的行

r - 查找向量中 n 个最常见的值

r - 使用melt和ggplot绘制条形图

r - R 中的对象可以有多个类吗?

python - Pandas : fill NaN with the closest value, 根据类别列

python Pandas : Is There a Faster Way to Split and Recombine a DataFrame based on criteria?

r - 如何为 rasterStack 中的所有栅格图层显示相同的图例

r - 从数据框中对一列进行子集化,将子集保留为数据框

algorithm - 集合的每个子集的最小和最大元素的或之和