为r中的每一行计算具有相同值/字符串的列
假设我的数据(虚构),数据帧如下所示:为r中的每一行计算具有相同值/字符串的列,r,R,假设我的数据(虚构),数据帧如下所示: > head(data) mpg_H cyl_G disp_G Mazda RX4 TRUE TRUE TRUE Mazda RX4 Wag TRUE FALSE FALSE Datsun 710 FALSE FALSE FALSE Hornet 4 Drive F
> head(data)
mpg_H cyl_G disp_G
Mazda RX4 TRUE TRUE TRUE
Mazda RX4 Wag TRUE FALSE FALSE
Datsun 710 FALSE FALSE FALSE
Hornet 4 Drive FALSE TRUE TRUE
Hornet Sportabout TRUE TRUE TRUE
Valiant TRUE TRUE FALSE
现在,我想添加两列,计算每行的TRUE和FALSE数,如下所示:
> head(data)
mpg_H cyl_G disp_G count_TRUE count_FALSE
Mazda RX4 TRUE TRUE TRUE 3 0
Mazda RX4 Wag TRUE FALSE FALSE 1 2
Datsun 710 FALSE FALSE FALSE 0 3
Hornet 4 Drive FALSE TRUE TRUE 2 1
Hornet Sportabout TRUE TRUE TRUE 3 0
Valiant TRUE TRUE FALSE 2 1
请帮助我解决R中的问题。尝试
行和
或减少
count_TRUE <- rowSums(df) # Or count_TRUE <- Reduce(`+`, df)
df[c("count_TRUE", "count_FALSE")] <- cbind(count_TRUE, ncol(df) - count_TRUE)
df
# mpg_H cyl_G disp_G count_TRUE count_FALSE
# Mazda RX4 TRUE TRUE TRUE 3 0
# Mazda RX4 Wag TRUE FALSE FALSE 1 2
# Datsun 710 FALSE FALSE FALSE 0 3
# Hornet 4 Drive FALSE TRUE TRUE 2 1
# Hornet Sportabout TRUE TRUE TRUE 3 0
# Valiant TRUE TRUE FALSE 2 1
count\u TRUE尝试rowSums
或Reduce
count_TRUE <- rowSums(df) # Or count_TRUE <- Reduce(`+`, df)
df[c("count_TRUE", "count_FALSE")] <- cbind(count_TRUE, ncol(df) - count_TRUE)
df
# mpg_H cyl_G disp_G count_TRUE count_FALSE
# Mazda RX4 TRUE TRUE TRUE 3 0
# Mazda RX4 Wag TRUE FALSE FALSE 1 2
# Datsun 710 FALSE FALSE FALSE 0 3
# Hornet 4 Drive FALSE TRUE TRUE 2 1
# Hornet Sportabout TRUE TRUE TRUE 3 0
# Valiant TRUE TRUE FALSE 2 1
count\u TRUE您可以使用apply
和sum
df$count_TRUE <- apply(df, 1,sum);
df$count_FALSE <- (ncol(df)-1)-df$count_TRUE;
df$count\u TRUE您可以使用apply
和sum
df$count_TRUE <- apply(df, 1,sum);
df$count_FALSE <- (ncol(df)-1)-df$count_TRUE;
谢谢大卫,这正是我想要的。请您也解释一下它是如何为特定的值工作的。例如,我只想计算每行值为4的列。它将TRUE
和FALSE
转换为1
和0
,然后将它们相加。如果你想用4
计算所有列,你可以做rowSums(df==4)
谢谢David,这正是我想要的。请您也解释一下它是如何为特定的值工作的。例如,我只想计算每行值为4的列。它将TRUE
和FALSE
转换为1
和0
,然后将它们相加。如果要使用4
计算所有列,可以执行行和(df==4)