我有一个大数据集,但这是我的一组数据:
df <- read.table(header = TRUE, text =
"Cues 214 330 226
M A B M
Z Z Z Z
P J P 12
R K R 11
"
)
“提示”列指导我获取下表。如果是相同的字母,则为10,否则为0
df <- read.table(header = TRUE, text =
"214 330 226
0 0 10
10 10 10
0 10 0
0 10 0
"
)
我们可以在R中做到吗?
答案 0 :(得分:1)
这是建立基地的快速方法:
df[] = lapply(df, as.character) # convert to character, if needed
result = df[-1]
result[] = lapply(result, function(x) ifelse(x == df$Cues, 10, 0))
result
# X214 X330 X226
# 1 0 0 10
# 2 10 10 10
# 3 0 10 0
# 4 0 10 0
还有dplyr
:
library(dplyr) # across requires dplyr version 1.0 or higher
df %>%
mutate(
across(where(is.factor), as.character), # convert to character, if needed
across(-Cues, ~ if_else(. == Cues, 10, 0))
) %>%
select(-Cues)
# X214 X330 X226
# 1 0 0 10
# 2 10 10 10
# 3 0 10 0
# 4 0 10 0
答案 1 :(得分:0)
使用across()
中的dplyr
:
library(dplyr)
#Code
df2 <- df %>% mutate(across(everything(),~as.character(.))) %>%
mutate(across(X214:X226,~ifelse(.==Cues,10,0))) %>% select(-Cues)
输出:
X214 X330 X226
1 0 0 10
2 10 10 10
3 0 10 0
4 0 10 0