我有以下数据框:
df <- data.frame("Logical"=c("true",NA,"false","true","","false"),
"Numeric"=c(1,2,3,4,5,6))
unique(df$Logical)
length(df$Logical == TRUE)
我想知道我的TRUE
列中有多少df$Logical
- 值。但似乎我遗漏了一些东西,length(df$Logical == TRUE)
在我的逻辑列中没有返回任何记录。
在这种特殊情况下,我做错了什么。对于TRUE
- df$Logical
列中的值,所需结果应为2。非常感谢提前。
答案 0 :(得分:0)
我们需要在小写字母中指定字符串,因为值为&#39; true / false&#39;并不完全TRUE/FALSE
。另外,应使用length
而不是sum
。 sum
获取TRUE元素的数量。
sum(df$Logical == "true")
#[1] 2
如果列中有NA元素,请使用na.rm = TRUE
sum(df$Logical=='true', na.rm = TRUE)
#[1] 2
逻辑或任何其他向量的length
将与数据集的原始长度/行数相同。
length(df$Logical == "true")
#[1] 6
因为它返回length
6的逻辑向量。
df$Logical == "true"
#[1] TRUE FALSE FALSE TRUE FALSE FALSE
要获取true
和false
的计数,我们可以使用table
table(df$Logical)
答案 1 :(得分:0)
首先,将“true”和“false”放入数据框中不是布尔语,而是简单的字符串。
此外,length(df$Logical == TRUE)
在此示例中将始终返回6,即列中元素的数量。这是因为df$Logical == TRUE
返回TRUE或FALSE序列。在你的情况下,它将返回
FALSE NA FALSE FALSE FALSE FALSE
因为布尔表达式永远不会成立。但是,length()
返回的长度为6。
要解决此问题,您可以像这样定义数据框
df <- data.frame("Logical"=c(TRUE,NA,FALSE,FALSE,NA,FALSE),
"Numeric"=c(1,2,3,4,5,6))
然后你可以总结一下TRUE
sum(df$Logical == TRUE, na.rm = T)
[1] 2
na.rm = T
在此很重要,否则如果还有一个元素NA
,则总和将返回NA
。
或者,您可以使用字符串来表示true或false(以及空字符串NA)
然后你可以写
df <- data.frame("Logical"=c("true",NA,"false","true","","false"),
"Numeric"=c(1,2,3,4,5,6))
sum(df$Logical == "true", na.rm = T)
[1] 2