R 从现有列创建列的数据框只考虑第一行
我有一个这样的数据帧R 从现有列创建列的数据框只考虑第一行,r,split,dataframe,R,Split,Dataframe,我有一个这样的数据帧 head(test) sku array 1 AQ665ELABLKLANID-81796 0,0,0,1,1,1,2 2 AQ665ELABLKMANID-81797 2,0,0,0,1,1,0,0,1 3 AQ665ELABLKNANID-81798 0,1,2,1,1,0,4,1
head(test)
sku array
1 AQ665ELABLKLANID-81796 0,0,0,1,1,1,2
2 AQ665ELABLKMANID-81797 2,0,0,0,1,1,0,0,1
3 AQ665ELABLKNANID-81798 0,1,2,1,1,0,4,1
4 AQ665ELABLKOANID-81799 0,1,0,1
5 AQ665ELABLKPANID-81800 1,4,4,2,3,7,2,2
6 AQ665ELABLKRANID-81802 0,1,1,0
我想添加一个名为first的列,其中每行包含数组的第一个元素:
test$first = strsplit(test$array,",")[[1]][1]
但我得到的是:
head(test)
sku array first
1 AQ665ELABLKLANID-81796 0,0,0,1,1,1,2 0
2 AQ665ELABLKMANID-81797 2,0,0,0,1,1,0,0,1 0
3 AQ665ELABLKNANID-81798 0,1,2,1,1,0,4,1 0
4 AQ665ELABLKOANID-81799 0,1,0,1 0
5 AQ665ELABLKPANID-81800 1,4,4,2,3,7,2,2 0
6 AQ665ELABLKRANID-81802 0,1,1,0 0
我不明白为什么所有的行都只从第一行的数组中获取值,我想您实际上想要:
test$first <- sapply(strsplit(test$array,","),"[",1)
test
# sku array first
#1 AQ665ELABLKLANID-81796 0,0,0,1,1,1,2 0
#2 AQ665ELABLKMANID-81797 2,0,0,0,1,1,0,0,1 2
#3 AQ665ELABLKNANID-81798 0,1,2,1,1,0,4,1 0
#4 AQ665ELABLKOANID-81799 0,1,0,1 0
#5 AQ665ELABLKPANID-81800 1,4,4,2,3,7,2,2 1
#6 AQ665ELABLKRANID-81802 0,1,1,0 0
提供了
test$array[1]
的拆分版本,然后从中子集第一个元素,它恰好是0
。因此,您的所有值最终都是0
我认为您实际上想要:
test$first <- sapply(strsplit(test$array,","),"[",1)
test
# sku array first
#1 AQ665ELABLKLANID-81796 0,0,0,1,1,1,2 0
#2 AQ665ELABLKMANID-81797 2,0,0,0,1,1,0,0,1 2
#3 AQ665ELABLKNANID-81798 0,1,2,1,1,0,4,1 0
#4 AQ665ELABLKOANID-81799 0,1,0,1 0
#5 AQ665ELABLKPANID-81800 1,4,4,2,3,7,2,2 1
#6 AQ665ELABLKRANID-81802 0,1,1,0 0
提供了
test$array[1]
的拆分版本,然后从中子集第一个元素,它恰好是0
。因此,您的所有值最终都是0
我认为您实际上想要:
test$first <- sapply(strsplit(test$array,","),"[",1)
test
# sku array first
#1 AQ665ELABLKLANID-81796 0,0,0,1,1,1,2 0
#2 AQ665ELABLKMANID-81797 2,0,0,0,1,1,0,0,1 2
#3 AQ665ELABLKNANID-81798 0,1,2,1,1,0,4,1 0
#4 AQ665ELABLKOANID-81799 0,1,0,1 0
#5 AQ665ELABLKPANID-81800 1,4,4,2,3,7,2,2 1
#6 AQ665ELABLKRANID-81802 0,1,1,0 0
提供了
test$array[1]
的拆分版本,然后从中子集第一个元素,它恰好是0
。因此,您的所有值最终都是0
我认为您实际上想要:
test$first <- sapply(strsplit(test$array,","),"[",1)
test
# sku array first
#1 AQ665ELABLKLANID-81796 0,0,0,1,1,1,2 0
#2 AQ665ELABLKMANID-81797 2,0,0,0,1,1,0,0,1 2
#3 AQ665ELABLKNANID-81798 0,1,2,1,1,0,4,1 0
#4 AQ665ELABLKOANID-81799 0,1,0,1 0
#5 AQ665ELABLKPANID-81800 1,4,4,2,3,7,2,2 1
#6 AQ665ELABLKRANID-81802 0,1,1,0 0
提供了
test$array[1]
的拆分版本,然后从中子集第一个元素,它恰好是0
。因此,您的所有值最终都是0
我想这里也可以使用一些正则表达式。以下几点可能会派上用场:
gsub("(^[0-9]+)(,.*)", "\\1", test$array)
# [1] "0" "2" "0" "0" "1" "0"
gsub("(^.*?),(.*)", "\\1", test$array, perl=TRUE)
# [1] "0" "2" "0" "0" "1" "0"
有一些软件包(如“stringi”和“stringr”)使这类事情更容易完成
library(stringi)
stri_extract_first_regex(test$array, pattern="[0-9]+")
# [1] "0" "2" "0" "0" "1" "0"
这还可以让您轻松提取最后一个值,方法是:
stri_extract_last_regex(test$array, pattern="[0-9]+")
# [1] "2" "1" "1" "1" "2" "0"
我想一些正则表达式也可以在这里使用。以下几点可能会派上用场:
gsub("(^[0-9]+)(,.*)", "\\1", test$array)
# [1] "0" "2" "0" "0" "1" "0"
gsub("(^.*?),(.*)", "\\1", test$array, perl=TRUE)
# [1] "0" "2" "0" "0" "1" "0"
有一些软件包(如“stringi”和“stringr”)使这类事情更容易完成
library(stringi)
stri_extract_first_regex(test$array, pattern="[0-9]+")
# [1] "0" "2" "0" "0" "1" "0"
这还可以让您轻松提取最后一个值,方法是:
stri_extract_last_regex(test$array, pattern="[0-9]+")
# [1] "2" "1" "1" "1" "2" "0"
我想一些正则表达式也可以在这里使用。以下几点可能会派上用场:
gsub("(^[0-9]+)(,.*)", "\\1", test$array)
# [1] "0" "2" "0" "0" "1" "0"
gsub("(^.*?),(.*)", "\\1", test$array, perl=TRUE)
# [1] "0" "2" "0" "0" "1" "0"
有一些软件包(如“stringi”和“stringr”)使这类事情更容易完成
library(stringi)
stri_extract_first_regex(test$array, pattern="[0-9]+")
# [1] "0" "2" "0" "0" "1" "0"
这还可以让您轻松提取最后一个值,方法是:
stri_extract_last_regex(test$array, pattern="[0-9]+")
# [1] "2" "1" "1" "1" "2" "0"
我想一些正则表达式也可以在这里使用。以下几点可能会派上用场:
gsub("(^[0-9]+)(,.*)", "\\1", test$array)
# [1] "0" "2" "0" "0" "1" "0"
gsub("(^.*?),(.*)", "\\1", test$array, perl=TRUE)
# [1] "0" "2" "0" "0" "1" "0"
有一些软件包(如“stringi”和“stringr”)使这类事情更容易完成
library(stringi)
stri_extract_first_regex(test$array, pattern="[0-9]+")
# [1] "0" "2" "0" "0" "1" "0"
这还可以让您轻松提取最后一个值,方法是:
stri_extract_last_regex(test$array, pattern="[0-9]+")
# [1] "2" "1" "1" "1" "2" "0"
谢谢。请您解释一下“[”?“[”是一个提取函数,与执行x[1]相同。请参阅内联帮助中的?提取。非常感谢。请您解释一下“[”?“[”是一个提取函数,与执行x[1]相同,它的用途是什么.See?在内联帮助中提取。非常感谢。请您解释一下“[”?“[”是一个提取函数,与执行x[1]相同。请参阅内联帮助中的?提取。非常感谢。请您解释一下“[”?“[”是一个提取函数,与执行x[1]相同,它的用途是什么。请参阅?内联帮助中的摘录。在某些方面可能更简单。+1在某些方面可能更简单。+1在某些方面可能更简单。+1在某些方面可能更简单。+1在某些方面可能更简单。+1