Чтобы добавить к другим ответам, так как вы сказали, что хотите сделать это, используя dplyr mutate
.
Вот путь к этому в mutate
, используя paste
:
iris %>% mutate(uniqueId= paste(Petal.Width, Species, sep = '_'))
# gives the following result:
Sepal.Length Sepal.Width Petal.Length Petal.Width Species uniqueId
1 5.1 3.5 1.4 0.2 setosa 0.2_setosa
2 4.9 3 1.4 0.2 setosa 0.2_setosa
3 4.7 3.2 1.3 0.2 setosa 0.2_setosa
4 4.6 3.1 1.5 0.2 setosa 0.2_setosa
5 5 3.6 1.4 0.2 setosa 0.2_setosa
6 5.4 3.9 1.7 0.4 setosa 0.4_setosa
7 4.6 3.4 1.4 0.3 setosa 0.3_setosa
8 5 3.4 1.5 0.2 setosa 0.2_setosa
9 4.4 2.9 1.4 0.2 setosa 0.2_setosa
10 4.9 3.1 1.5 0.1 setosa 0.1_setosa
...
Если ваша функция - это пользовательская функция, вы можете векторизовать ее и затем использовать.Например, это приводит к тому же результату, что и выше:
concat_fields<-function(var1, var2) {
return (paste(var1, var2, sep = '_'))
}
v_concat_fields <- Vectorize(concat_fields)
iris %>% mutate(v_concat_fields(Petal.Width, Species))
Функция, которая переходит в mutate, будет применена к столбцам фрейма данных, она имеет аргументы векторов типов, а не фреймы данных.