R中混合类型的变量
variable of mixed types in R
更新
我使用以下命令从 CSV 文件导入了一个数据库:
data.CGS <- read.csv("filepath", sep=";", na.strings=c(""," ","NA"), stringsAsFactors =F)
CSV文件中的一列有不同类型的数据,数值、整数、百分比和字符串。
假设,为简单起见,此列具有以下元素 col=[1,2,1, c, 2%, 4%, 15.5, 16.5]
因此,在 R 中将读取此列,就好像创建此变量一样
col<-c("1","2", "c", "2%", "4%", "15.5", "16.5", "1980", "1/12/1950")
我的目的是根据 "truly" 数值数据做一些制表和计算一些统计数据,在这个例子中是除了字母 "c" 和日期之外的所有值,1980 年和 1/12/1950。
在 R 中执行此操作的最简单方法是什么?任何帮助将不胜感激。
当然,有一个非常简单的事情要做,那就是将所有元素强制为数字,但是在 R 中这意味着将所有字符转换为 NA - 我不喜欢。
你在问题中问了很多问题。你可以以此为例
col<-data.frame(var = c("1","2", "c", "2%", "4%", "15.5", "16.5"))
col
library(dplyr)
通过 gsub
您从变量 var
中删除了 % 符号,在 filter
您从变量
中删除了一个 c
值
col %>% mutate(var1 = gsub("%", "", var)) %>% filter(var1 != "c") %>% summarise(m_n = mean(as.numeric(var1)))
m_n
1 6.833333
一种方法是创建一个独立于任何文本字符的新矢量。
## Create new vector without any characters
col2 <- col[-grep("[a-zA-Z]", col)]
## To strip percentages (%)
strip_percents <- as.numeric(gsub("%", "", col2))
## All numbers except percentages
no_percents <- as.numeric(col2[-grep("%", col2)])
## Save strings in new vector
all_yo_strings <- col[grep("[a-zA-Z]", col)]
## Save percentages in a new vector
all_yo_percents <- col[grep("%", col)]
all_yo_percents <- as.numeric(gsub("%", "", all_yo_percents))/100
这对您有用吗?它会将您的文本字符串保留在原始 col
变量中(您只需从 col[-grep("[a-zA-Z]", col)]
中删除 -
即可访问该变量),同时为您提供一个新的数字向量。
更新
我使用以下命令从 CSV 文件导入了一个数据库:
data.CGS <- read.csv("filepath", sep=";", na.strings=c(""," ","NA"), stringsAsFactors =F)
CSV文件中的一列有不同类型的数据,数值、整数、百分比和字符串。
假设,为简单起见,此列具有以下元素 col=[1,2,1, c, 2%, 4%, 15.5, 16.5]
因此,在 R 中将读取此列,就好像创建此变量一样
col<-c("1","2", "c", "2%", "4%", "15.5", "16.5", "1980", "1/12/1950")
我的目的是根据 "truly" 数值数据做一些制表和计算一些统计数据,在这个例子中是除了字母 "c" 和日期之外的所有值,1980 年和 1/12/1950。
在 R 中执行此操作的最简单方法是什么?任何帮助将不胜感激。
当然,有一个非常简单的事情要做,那就是将所有元素强制为数字,但是在 R 中这意味着将所有字符转换为 NA - 我不喜欢。
你在问题中问了很多问题。你可以以此为例
col<-data.frame(var = c("1","2", "c", "2%", "4%", "15.5", "16.5"))
col
library(dplyr)
通过 gsub
您从变量 var
中删除了 % 符号,在 filter
您从变量
c
值
col %>% mutate(var1 = gsub("%", "", var)) %>% filter(var1 != "c") %>% summarise(m_n = mean(as.numeric(var1)))
m_n
1 6.833333
一种方法是创建一个独立于任何文本字符的新矢量。
## Create new vector without any characters
col2 <- col[-grep("[a-zA-Z]", col)]
## To strip percentages (%)
strip_percents <- as.numeric(gsub("%", "", col2))
## All numbers except percentages
no_percents <- as.numeric(col2[-grep("%", col2)])
## Save strings in new vector
all_yo_strings <- col[grep("[a-zA-Z]", col)]
## Save percentages in a new vector
all_yo_percents <- col[grep("%", col)]
all_yo_percents <- as.numeric(gsub("%", "", all_yo_percents))/100
这对您有用吗?它会将您的文本字符串保留在原始 col
变量中(您只需从 col[-grep("[a-zA-Z]", col)]
中删除 -
即可访问该变量),同时为您提供一个新的数字向量。