根据 R 中的第二列填充列的空格
Fill a column's blank spaces contingent on a second column in R
我很感激这方面的帮助。我有一些类似于下面的数据。
df$A df$B
1 .
1 .
1 .
1 6
2 .
2 .
2 7
我需要做的是在 df$B
中填写对应于 df$A
中 运行 个值末尾的每个值。示例如下。
df$A df$B
1 6
1 6
1 6
1 6
2 7
2 7
2 7
欢迎任何帮助。
在我看来,缺失值用 .
表示。最好用 na.strings="."
读取数据集,这样缺失值将是 NA
。对于当前数据集,'B' 列将是 character/factor
class(取决于您是否在 read.table/read.csv
.[=31= 中使用 stringsAsFactors=FALSE/TRUE
(默认值) ]
使用data.table
,我们将data.frame
转换为data.table
(setDT(df1)
),将'character' class更改为'numeric'(B:= as.numeric(B)
)。这也将导致将 .
强制转换为 NA
(将出现警告)。按 "A" 分组,我们将 "B" 值更改为最后一个元素 (B:= B[.N]
)
library(data.table)
setDT(df1)[,B:= as.numeric(B)][,B:=B[.N] , by = A]
# A B
#1: 1 6
#2: 1 6
#3: 1 6
#4: 1 6
#5: 2 7
#6: 2 7
#7: 2 7
或 dplyr
library(dplyr)
df1 %>%
group_by(A) %>%
mutate(B= as.numeric(tail(B,1)))
或使用 base R
中的 ave
df1$B <- with(df1, as.numeric(ave(B, A, FUN=function(x) tail(x,1))))
数据
df1 <- structure(list(A = c(1L, 1L, 1L, 1L, 2L, 2L, 2L), B = c(".",
".", ".", "6", ".", ".", "7")), .Names = c("A", "B"),
class = "data.frame", row.names = c(NA, -7L))
我很感激这方面的帮助。我有一些类似于下面的数据。
df$A df$B
1 .
1 .
1 .
1 6
2 .
2 .
2 7
我需要做的是在 df$B
中填写对应于 df$A
中 运行 个值末尾的每个值。示例如下。
df$A df$B
1 6
1 6
1 6
1 6
2 7
2 7
2 7
欢迎任何帮助。
在我看来,缺失值用 .
表示。最好用 na.strings="."
读取数据集,这样缺失值将是 NA
。对于当前数据集,'B' 列将是 character/factor
class(取决于您是否在 read.table/read.csv
.[=31= 中使用 stringsAsFactors=FALSE/TRUE
(默认值) ]
使用data.table
,我们将data.frame
转换为data.table
(setDT(df1)
),将'character' class更改为'numeric'(B:= as.numeric(B)
)。这也将导致将 .
强制转换为 NA
(将出现警告)。按 "A" 分组,我们将 "B" 值更改为最后一个元素 (B:= B[.N]
)
library(data.table)
setDT(df1)[,B:= as.numeric(B)][,B:=B[.N] , by = A]
# A B
#1: 1 6
#2: 1 6
#3: 1 6
#4: 1 6
#5: 2 7
#6: 2 7
#7: 2 7
或 dplyr
library(dplyr)
df1 %>%
group_by(A) %>%
mutate(B= as.numeric(tail(B,1)))
或使用 base R
ave
df1$B <- with(df1, as.numeric(ave(B, A, FUN=function(x) tail(x,1))))
数据
df1 <- structure(list(A = c(1L, 1L, 1L, 1L, 2L, 2L, 2L), B = c(".",
".", ".", "6", ".", ".", "7")), .Names = c("A", "B"),
class = "data.frame", row.names = c(NA, -7L))