一起使用 startsWith 和 paste0
Using startsWith and paste0 together
我有一个类似于以下的数据框:
Frequency Period No. Period
Q1 3
Q2 6
Q3 9
如果频率列中的值以 "Q" 开头,我希望周期列填充相应的季度(即,如果频率为 Q1,则周期为 Q1)。我不希望通过简单地将频率列中的值粘贴到周期列来完成此操作。
我目前正在尝试使用 startsWith 和 paste0 来执行此操作:
df$Frequency[startsWith(df$Frequency, "Q")] <- paste0("Q", (df$`Period No.`)-1)%/%3+1)
我遇到了错误
Error in startsWith(df$Frequency, "Q") :
non-character object(s)
有人可以帮忙解决这个问题吗?
您的数据框字符似乎被解析为因子,这意味着它们是隐藏的整数。
为避免这种情况,您可以在阅读或构造 data.frame 时放置选项 stringsAsFactors=FALSE... 或者更新到刚刚删除此默认行为的 4.0 版 ;)
然后,您可能会遇到另一个问题,因为您必须对右侧 df$Period No.
进行子集化才能获得与左侧相同数量的 obs。
解析示例,将因子重新解析为字符:
df <- data.frame(a=c("john","jane","pamela","jessica"),b=1:4)
df$a <- as.character(df$a)
boolean <- startsWith(df$a,"j")
df[boolean,"a"] <- df[boolean,"b"]
我们可以使用 case_when
或 ifelse
或简单的索引赋值
i1 <- grepl("^Q\d+", df$Frequency)
df$Period[i1] <- df$`Period No.`[i1]
我有一个类似于以下的数据框:
Frequency Period No. Period
Q1 3
Q2 6
Q3 9
如果频率列中的值以 "Q" 开头,我希望周期列填充相应的季度(即,如果频率为 Q1,则周期为 Q1)。我不希望通过简单地将频率列中的值粘贴到周期列来完成此操作。
我目前正在尝试使用 startsWith 和 paste0 来执行此操作:
df$Frequency[startsWith(df$Frequency, "Q")] <- paste0("Q", (df$`Period No.`)-1)%/%3+1)
我遇到了错误
Error in startsWith(df$Frequency, "Q") :
non-character object(s)
有人可以帮忙解决这个问题吗?
您的数据框字符似乎被解析为因子,这意味着它们是隐藏的整数。
为避免这种情况,您可以在阅读或构造 data.frame 时放置选项 stringsAsFactors=FALSE... 或者更新到刚刚删除此默认行为的 4.0 版 ;)
然后,您可能会遇到另一个问题,因为您必须对右侧 df$Period No.
进行子集化才能获得与左侧相同数量的 obs。
解析示例,将因子重新解析为字符:
df <- data.frame(a=c("john","jane","pamela","jessica"),b=1:4)
df$a <- as.character(df$a)
boolean <- startsWith(df$a,"j")
df[boolean,"a"] <- df[boolean,"b"]
我们可以使用 case_when
或 ifelse
或简单的索引赋值
i1 <- grepl("^Q\d+", df$Frequency)
df$Period[i1] <- df$`Period No.`[i1]