I have a dataframe with several columns some of which contain individual characters for example:
test <- data.frame("IsA" = c("1.0", "0.5", "0.0"), "IsB" = c("1.0", "0.5", "0.0"), "IsC" = c("0.0", "0.5", "0.0"), "C1" = c("a", "b", "c"), "C2"= c("a", "a", "c"), "C3" = c("a", "b", "b"), "C4" = c("c", "b", "c"))
Giving:
IsA IsB IsC C1 C2 C3 C4
1 1.0 1.0 0.0 a a a c
2 0.5 0.5 0.5 b a b b
3 0.0 0.0 0.0 c c b c
For each row I would like to add another 4 columns so that if C1 is "a" and "IsA" is greater than or equal to 0.05 the new column value is True.
IsA IsB IsC C1 C2 C3 C4 C1.t C2.t C3.t C4.t
1 1.0 1.0 0.0 a a a c TRUE TRUE TRUE FALSE
2 0.5 0.5 0.5 b a b b TRUE TRUE TRUE TRUE
3 0.0 0.0 0.0 c c b c FALSE FALSE FALSE FALSE
Not optimized for speed:
test <- cbind(test,
t(apply(test, 1, function(x) {
a <- as.numeric(x[1:3])
names(a) <- letters[1:3]
b <- x[-(1:3)]
a[b] >= 0.05
})))
IsA IsB IsC C1 C2 C3 C4 1 2 3 4
1 1.0 1.0 0.0 a a a c TRUE TRUE TRUE FALSE
2 0.5 0.5 0.5 b a b b TRUE TRUE TRUE TRUE
3 0.0 0.0 0.0 c c b c FALSE FALSE FALSE FALSE
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.