我需要您的帮助!我有关注df
df <- data.frame("Time,Value"=c(
"32,2,044678E-02",
"32,05,2,044678E-02",
"32,1,2,044678E-02",
"32,15,2,044678E-02"))
问题在于,分隔符(这里的逗号“,”)与小数点位置混合在一起,这里也是逗号“,” ...
我想要以下内容:
df <- data.frame(Time=c(
32, 32.05, 32.1, 32.15),
Value=c(2.044678E-02, 2.044678E-02, 2.044678E-02, 2.044678E-02))
这只是一个简短的例子,但是我有超过3万行的数据!!!对于您的生物学家来说:这是Aglient Bioanalyzer数据的导出,并且是混乱的获取数据,与英语和德语十进制指示符混合在一起!
希望您能帮助我。我尝试了几件事,但没有成功
我不知道,但是也许一个解决方案可能是识别最后一个逗号并在此点分割字符。 示例:
32,2,044678E-02 to 32 2,044678E-02
and
32,15,2,044678E-02 to 32,15 2,044678E-02
和 ....等等 最好
答案 0 :(得分:3)
这是使用predict()
和UPDATE t2
SET t2.WEIGHT = t1.AVG_WEIGHT
FROM TABLE2 t2
INNER JOIN (select TABLE1.DESCRIPTION,AVG(TABLE1.WEIGHT) as AVG_WEIGHT
from TABLE1
group by TABLE1.DESCRIPTION) as t1
on TABLE2.DESCRIPTION = TABLE1.DESCRIPTION
的一种方式:
gsub
现在,您可以转换为具有所需规格的str_split
。
答案 1 :(得分:2)
请注意,精度不会丢失,只是为打印方法舍入了值。
library(tidyverse)
df$Time.Value %>%
as.character %>%
strsplit(',') %>%
map_dfr(~ {
# apply function to .x, separately for (last 2 comma-delimited groups) and (all others)
tapply(.x, rev(seq_along(.x)) <= 2
, function(x) as.numeric(paste0(x, collapse = '.'))
, simplify = F) %>%
setNames(c('Time', 'Value'))
})
# # A tibble: 4 x 2
# Time Value
# <dbl> <dbl>
# 1 32 0.0204
# 2 32.0 0.0204
# 3 32.1 0.0204
# 4 32.2 0.0204
答案 2 :(得分:0)
已经有更整洁的解决方案。我认为由于直接使用lapply
,因此修改起来非常容易。
df <- data.frame(
"Time,Value" = c(
"32,2,044628E-02",
"32,05,2,054678E-02",
"32,1,2,044878E-02",
"32,15,2,044218E-02"
)
)
as.data.frame(do.call(rbind, lapply(
X = strsplit(df$Time.Value, ",", perl = TRUE),
FUN = function(x) {
c(paste(x[1:(length(x) - 2)], collapse = ".")
,
paste0(x[length(x) - 1], ".", x[length(x)]))
}
))) -> df_clean
setNames(object = df_clean,
unlist(strsplit(
names(df), split = ".", fixed = TRUE
))) -> df_clean
head(df_clean)
答案 3 :(得分:0)
此REGEX应该可以解决问题:
([^",\s].*),(\d+,\d+E-\d+)