R:根据条件的行值填充data.frame中的新列?

标签 r

我想根据行中的值在 data.frame 中创建新列。

如果“type”不等于“a”,我的“new.area”列应包含来自“a”类型的“area”的数据。这是针对多个“距离”的。

Example:

# create data frame
distance<-rep(seq(1,5, by = 1),2)
area<-c(11:20)
type<-rep(c("a","b"),each = 5)

# check data.frame
(my.df<-data.frame(distance, area, type))

   distance area type
1         1   11    a
2         2   12    a
3         3   13    a
4         4   14    a
5         5   15    a
6         1   16    b
7         2   17    b
8         3   18    b
9         4   19    b
10        5   20    b

我想创建一个新列(my.df$new.area),其中对于行中的每个“距离”,都会有“a”类型的“区域”值。

   distance area type new.area
1         1   11    a       11
2         2   12    a       12
3         3   13    a       13
4         4   14    a       14
5         5   15    a       15
6         1   16    b       11
7         2   17    b       12
8         3   18    b       13
9         4   19    b       14
10        5   20    b       15

我知道如何手动为单行进行此操作:

my.df$new.area[my.df$distance == 1 ] <- 11

但是如何自动生成呢?

最佳答案

这是使用索引子集 ([) 和 match 的基本 R 解决方案:

my.df$new.area <- with(my.df, area[type == "a"][match(distance, distance[type == "a"])])

返回

my.df
   distance area type new.area
1         1   11    a       11
2         2   12    a       12
3         3   13    a       13
4         4   14    a       14
5         5   15    a       15
6         1   16    b       11
7         2   17    b       12
8         3   18    b       13
9         4   19    b       14
10        5   20    b       15

area[type == "a"] 提供可能性向量。 match 用于通过距离变量返回此向量的索引。 with用于避免重复使用my.df$

关于R:根据条件的行值填充data.frame中的新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41062476/

相关文章:

r - 映射列并使用 map_dbl 提取第一个数字

r - 合并 3 个数据框左连接

r - 使用 data.table 进行内存分析

r - 为什么tiff输出看起来与R studio中的ggplot2输出不同?

传入函数后返回向量中的值

用它的序号替换向量中的所有元素

r - 在R函数中基于变量名称将位置参数转换为命名参数

r - 如何在testthat框架中设置expect_equal的容差

r - 在 r 中 X 方向的法线曲线下填充颜色网格

r - 没有适用于 'tm_map' 的方法应用于类 "character"的对象