在 r 中创建新变量(布尔值)
Create new variable (boolean) in r
我需要创建一个新变量 LineItem_LongName
如果 LineItem
的长度大于平均值则编码为 1,否则编码为 0。
我试过使用代码:
data <- data %>% mutate(LineItem_LongName = ifelse(length(LineItem)) > mean(LineItem)),1,0))
但是它给我一个错误
Warning messages:
1: Problem with `mutate()` input `LineItem_LongName`.
i argument is not numeric or logical: returning NA
i Input `LineItem_LongName` is `ifelse(length(LineItem) > mean(LineItem))`.
2: In mean.default(LineItem) :
argument is not numeric or logical: returning NA
我该怎么办?谢谢!
您确定要与 LineItem
的 length
或 LineItem
本身进行比较吗?
你可以用 ifelse
写成 :
library(dplyr)
data <- data %>%
mutate(LineItem_LongName = ifelse(LineItem >
mean(LineItem, na.rm = TRUE),1,0))
然而,你不需要ifelse
,你可以这样写:
data <- data %>%
mutate(LineItem_LongName = as.integer(LineItem >
mean(LineItem, na.rm = TRUE)))
在基数 R 中:
data$LineItem_LongName <- as.integer(data$LineItem > mean(data$LineItem, na.rm = TRUE))
你差不多大功告成了,只是需要更好地理解一些功能。
- Python 中有一个
len
函数,但 R 中没有,所以如果你在 R 中 运行 len(variable)
会出错。
- 要测量一个字符串的字符数,可以使用
nchar(str)
where nchar("hello")
will return you 5.
- 然而,R 中有一个函数
length
,用于测量给定向量的元素数。 length(c("hello","hello"))
将 return 2.
我已经创建了一个例子,试试看是不是你想要的。均值为 5,因此它正在检查颜色的长度是否大于 5。
library(tidyverse)
df <- data.frame("Colours" = c("Red Red", "Red", "Green", "Green",NA),
"Number" = c(1,2,3,4,5))
df
Colours Number
1 Red Red 1
2 Red 2
3 Green 3
4 Green 4
5 <NA> 5
df_new <- df %>%
mutate(LineItemLength = nchar(Colours)) %>% # Count number of characters including space
mutate(LineItem_LongName = ifelse(LineItemLength > mean(LineItemLength,na.rm = T),1,0))
df_new
Colours Number LineItemLength LineItem_LongName
1 Red Red 1 7 1
2 Red 2 3 0
3 Green 3 5 0
4 Green 4 5 0
5 <NA> 5 NA NA
mean(df_new$LineItemLength,na.rm = T)
5 # Not 4
我需要创建一个新变量 LineItem_LongName
如果 LineItem
的长度大于平均值则编码为 1,否则编码为 0。
我试过使用代码:
data <- data %>% mutate(LineItem_LongName = ifelse(length(LineItem)) > mean(LineItem)),1,0))
但是它给我一个错误
Warning messages:
1: Problem with `mutate()` input `LineItem_LongName`.
i argument is not numeric or logical: returning NA
i Input `LineItem_LongName` is `ifelse(length(LineItem) > mean(LineItem))`.
2: In mean.default(LineItem) :
argument is not numeric or logical: returning NA
我该怎么办?谢谢!
您确定要与 LineItem
的 length
或 LineItem
本身进行比较吗?
你可以用 ifelse
写成 :
library(dplyr)
data <- data %>%
mutate(LineItem_LongName = ifelse(LineItem >
mean(LineItem, na.rm = TRUE),1,0))
然而,你不需要ifelse
,你可以这样写:
data <- data %>%
mutate(LineItem_LongName = as.integer(LineItem >
mean(LineItem, na.rm = TRUE)))
在基数 R 中:
data$LineItem_LongName <- as.integer(data$LineItem > mean(data$LineItem, na.rm = TRUE))
你差不多大功告成了,只是需要更好地理解一些功能。
- Python 中有一个
len
函数,但 R 中没有,所以如果你在 R 中 运行len(variable)
会出错。 - 要测量一个字符串的字符数,可以使用
nchar(str)
wherenchar("hello")
will return you 5. - 然而,R 中有一个函数
length
,用于测量给定向量的元素数。length(c("hello","hello"))
将 return 2.
我已经创建了一个例子,试试看是不是你想要的。均值为 5,因此它正在检查颜色的长度是否大于 5。
library(tidyverse)
df <- data.frame("Colours" = c("Red Red", "Red", "Green", "Green",NA),
"Number" = c(1,2,3,4,5))
df
Colours Number
1 Red Red 1
2 Red 2
3 Green 3
4 Green 4
5 <NA> 5
df_new <- df %>%
mutate(LineItemLength = nchar(Colours)) %>% # Count number of characters including space
mutate(LineItem_LongName = ifelse(LineItemLength > mean(LineItemLength,na.rm = T),1,0))
df_new
Colours Number LineItemLength LineItem_LongName
1 Red Red 1 7 1
2 Red 2 3 0
3 Green 3 5 0
4 Green 4 5 0
5 <NA> 5 NA NA
mean(df_new$LineItemLength,na.rm = T)
5 # Not 4